面向对象
面向对象编程的本质:以类的方式组织代码,以对象的方式组织(封装)数据
面向对象三大特性
-
封装
禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问。
-
继承
-
多态
继承
继承的本质是对某一批类的抽象。
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends表示。子类拥有父类的全部方法
super
调用父类的构造方法,必须在构造方法的第一个
只能出现在子类的方法或构造方法中
super和this不能同时调用构造方法
对比this:
-
代表的对象不同
this:本身调用者
super:代表父类对象的应用
-
前提
this:没有继承也可以使用
super:只能在继承条件下才可以使用
-
构造方法
this(); 本类的构造
super(); 父类的构造
方法重写
条件:
- 有继承关系
- 子类重写父类
特点:
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大,但不能缩小
public > protected > default > private
-
抛出的异常:范围可以缩小,但不能扩大
Exception > ClassNotFoundException
不可被重写的方法:
- static方法(属于类,不属于实例)
- final 常量
- private方法
多态
同一方法可以根据发送对象的不同而采用多种不同的行为方式。属性没有多态
ClassCastException;//类型转换异常
存在的条件
-
有继承关系
-
子类重写父类的方法
-
父类引用指向子类的对象
Father f1=new Son();
类与对象的关系
类
抽象的数据类型,是对某一类事物整体的描述/定义,但并不代表某一具体事物
对象
抽象概念的具体实例
创建与初始化对象
使用new关键字创建对象,除了分配内存空间外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
构造器的基本特点:
- 必须和类的名字相同
- 必须没有返回类型,也不能写void
public class Person{
String name;
//无参构造
public Person(){}
//实例化初始值
//使用new关键字创建对象时,赋给变量默认值
public Person(String name){
this.name=name;
}
}
定义有参构造后,要调用无参构造,必须显式定义一个无参构造
抽象类
abstract修饰符可以用来修饰方法(->抽象方法),也可以修饰类(->抽象类)
抽象类不能使用new关键字来创建对象,它是用来让子类继承的
抽象方法只要方法的声明,没有方法的实现,它是用来让子类实现的
接口
声明类的关键字是class,声明接口的关键字是interface
类实现接口:
//类名 implements 接口名
public interface A{}
public class AImpl implements A(){}