Java面向对象总结

两种编程思想

面向过程和面向对象编程思想
面向过程POP:是一种基本的编程思想,是将一件事情按流程逐步实现。这种思想强调事情完成的过程,分析步骤写出相应的代码。
面向对象OOP:所有事情在需要时让各个对象执行,注重创建解决问题的对象。在面向对象中,给对象设计的方法,其实就是面向过程的。这种思想致力于将计算机中的世界,描述的和现实中一致。


一、对象和类

1.对象Object

某个类的具体实例,用于执行其类中的方法。

2.类class

定义类

[修饰符] class 类{
  //属性,定义变量
  //行为,定义方法
}

创建对象

类名 对象名=new 构造方法(参数)

对象是类的一个具体实例,是类的具体表现。

类和对象的关系
对象是类的具体表现,类是对象的合集(模板)。先定义模板类,才能通过类创建出对象。

成员变量、局部变量、静态常量

  • 成员变量:定义在类中的变量,使用范围在该类中,也称为这个类的属性,它有默认值,在对象创建时创建,通过对象访问。
  • 静态常量:特殊的成员变量,使用范围在该类中,用static和final修饰,它通常需要在定义时赋值,在类加载时就创建,通过类名方法。
  • 局部变量:定义在方法中的变量,使用范围在该方法中,它没有默认值,在赋值后才能使用,在方法调用时创建。

构造方法
是一种特殊的方法,方法名和类名一致,没有返回值部分。

[访问修饰符] 类名(){
 
}
  • 没有返回值部分,方法名必须和类名一致。
  • 每个类默认有一个无参数的构造方法,方法体中没有内容。
  • 构造方法不能通过"."操作符调用,所以通常用于初始化成员变量。
  • 如果自己写了有参的构造方法,默认无参的方法就会失效,如果想要使用无参的构造方法,需要再写出来才可以用。
  • 构造方法可以限制创建对象时的参数。
  • 可以同时存在多个不同参数的构造方法,这称为构造方法的重载。

二、面向对象的三大特征

1.封装

使用private关键字对属性进行修饰,可以防止除自身类以外的地方对该属性进行访问,以此达到保护核心代码的目的。
这样可以保护关键属性,隐藏类内部的实现细节,再对外提供一组公开的get/set方法用于对该属性的赋
值和读取。

2.继承

类A可以通过extends关键字继承类B。
语法:

class 类A extendds 类B

继承后,子类可以访问父类中私有的属性和方法。
不同的子类中相同的代码,都能定义在父类中,减少子类中代码的冗余。
继承的特点

  • 如果多个类之中有相同或者类似的大代码,可以将这些代码统一定义在一个公共类中,这个类就是父类。让这些类去继承父类,大大减少了代码量。
  • 子类对象可以直接访问父类中非私有的属性和方法。
  • 子类可以对父类中方法进行拓展或覆盖(重写),重写后,子类对象再调用该方法时,执行的是重写后的内容。
  • java中是单继承,一个子类只能有一个父类,一个父类可以有多个子类。
  • java中可以多重继承,类A可以继承类B,类B也可以继承类C,这时类A可以访问类B和类C中非私有的成员。
  • 在创建子类对象时,先执行父类中相应的构造方法。
  • 任何类都是Object类的子类。
    重写override
    子类继承父类后,对父类中的某个非私有方法进行重写,达到拓展或重做的目的。
  • 方法名、参数列表、返回值必须和父类一致。
  • 访问权限不能比父类更严格(访问修饰符的范围要么相同要么更)。
  • 不能抛出比父类更大的异常。

重载overload
在一个类中,如果多个方法的方法名相同,参数列表不同(参数类型不同或参数数量不同)时,这些方法称为重载的方法。同名不同参。
重载用于在一个类中,某个方法在不同的条件下,执行不同的内容。

  • 方法名相同。
  • 参数列表(参数类型和数量)不同。

3.多态

在继承中,子类的对象,可以保存到父类的变量中。再调用方法时,调用的是子类重写后的方法。

父类 对象 = new 子类();

实现多态特性的前提

  • 必须在继承关系中。
  • 子类的对象保存在父类的变量中。
//Father类是Son类的父类
//原本应该是Father类的对象保存到f中,但这里用子类对象也可以
Father f = new Son();

子类通常会重写父类的方法。
this和super
两者都可以当做对象或构造方法使用。
当做对象:this表示当前类的对象,super表示当前类的父类对象(this或super当对象时,只能用在非静态方法中)。
当做构造方法:this()表示当前类的无参构造方法,super()表示当前类的父类的无参构造方法(his或super当构造方法时,只能放在另一个构造方法的第一行)。
每个继承关系中,如果父类和子类都没有重载构造方法时,子类里都有一个默认无参的构造方法,其中在调用父类的无参的构造方法。

class Father{
 
}
class Son extends Fahter{
  //这段代码是隐藏的
  Son(){
    super();
 }
}

如果重载了父类的构造方法,在子类的构造方法中,一定要调用父类的某个重载的构造方法。

class Father{
  Father(String str){}
}
//继承时就会报错
class Son extends Fahter{
  //子类的构造方法中,一定要调用父类的某个构造方法
  Son(){
    super("xxx");
 }
}

三、Object类

是所有类的根类。任何类都直接或间接的继承了该类,但没有显式地写出来。所有类都可以调用或重写Object类中的方法。
toString()在输出某个对象时自动调用的方法,默认Object中输出的是“对象所在类的全限定名@十六进制哈希码”,
通常自己定义的类需要重写该方法,用于输出该对象中的属性。
equals()是比较两个对象是否相同的方法,默认Object中使用==比较,所以自定义类后,如果要比较该类的对象,一定要重写equals方法和hashcode方法,根据指定参数比较两个对象是否相同。


向上转型
子类对象保存到父类的变量中。

Person p =new Person();
Object obj=p;

向下转型
父类对象强行保存到子类的变量中。

Object obj=new Object();
Person p=(Person)obj;

final

  • 用于修饰属性、方法和类。
  • 修饰属性:变量变为常量,不能改变其值。
  • 修饰方法:方法不能被重写。
  • 修饰类:类不能被继承。

abstract
用于修饰类和方法,表示抽象的。
修饰方法,该方法称为抽象方法,没有方法体,同时该方法所在类一定也要使用abstract修饰成为抽象类。

  • 抽象方法只能出现在抽象类中,不能出现在普通类中。
  • 抽象类中可以没有抽象方法。
  • 抽象类中有构造方法,但该构造方法不能使用new调用,所以抽象类不能创建对象。
  • 抽象类中的构造方法,在创建其子类对象时自动调用。
  • 抽象类通常需要被继承,继承后子类一定要重写抽象类中的所有抽象方法。

interface
用于定义接口的关键字。代替原本的class。
如果某个抽象类中,全是抽象方法时,可以将该抽象类定义为一个接口。
接口是一个完全抽象类。其中的方法都是公共的public抽象abstract方法,其中的属性都是公共的public静态static常量final。在jdk1.8后,接口中可以定义默认default方法和静态static方法。

  • 接口中的方法都是被public abastract修饰,可以不用写出来。
  • 接口中的属性都是被public static final修饰,可以不用写出来(jdk1.8后,可以在接口中定义default方法和static方法)。
  • 接口通常需要一个类去实现,该类使用implements关键字实现接口。
  • 实现了接口的实现类,要重写其中所有抽象方法。
  • 接口没有构造方法,不能实例化对象。

static
可以修饰方法和属性,表示该方法或属性是静态的,在类加载时保存到内存中,无需对象参数,直接通过类名就能访问。
如果某个属性或方法被高度重用时,可以将其定义为静态的,之后直接通过类名调用。
还可以在类中定义静态代码块static{}。在类加载时自动执行的代码块。

总结
以上是这周学习的所有内容,还是比较多的,面向对象初听还是比较懵懂的,感觉不太绕得过去,很多时候还需要老师得讲解才能搞清楚,自己还得在课余时间多加练习才行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值