目录
面向对象——多态
什么是多态
多态的前提
多态有什么好处?
包
1.包的作用?
2.包名书写的规则?
3.什么时候需要导包?什么时候不需要导包?
final 修饰符
权限修饰符
4种权限修饰符的范围
抽象方法和抽象类
接口
接口的定义和使用
接口中成员的特点
接口和类之间的关系
类和类的关系
类和接口的关系
接口和接口的关系
内部类
内部类的访问特点
成员内部类
静态内部类
局部内部类
匿名内部类(重点)
面向对象——多态
什么是多态
多态是面向对象三大特征之一,是对象的多种形态
多态的前提
1.有继承/实现关系
2.有父类引用指向子类对象
3.有方法的重写
多态有什么好处?
使用父类型作为参数,可以接收所有子类对象,体现多态的拓展性与遍历
多态变量编译看左边,运行也看左边,多态方法编译看左边,运行看右边
包
1.包的作用?
包就是文件夹,用来管理各种不同功能的Java类
2.包名书写的规则?
需要全部英文小写,见名知意
公司域名反写+包的作用,
3.什么时候需要导包?什么时候不需要导包?
使用同一个包中的类时,不需要导包
使用java.lang包中的类时,不需要导包,
其他情况都需要导包
需要用全类名
如果同时使用两个包中的同名类,要写全类名(包名+类名)
final 修饰符
final修饰方法,该方法不能被重写
final修饰类,该类不能被继承
final修饰变量,叫做常量,值不能改变
权限修饰符
权限修饰符:是用来控制一个成员能够被访问的范围的
可以修饰成员变量,方法,构造方法,内部类
4种权限修饰符的范围
抽象方法和抽象类
抽象方法:将共性的行为(方法)抽取到父类之后。由于每一个子类执行的内容是不一样所以,在父类中不能确定具体的方法体该方法就可以定义为抽象方法。
疑问:既然每个子类又要重新写每个方法,那何不父类不定义这个类?反正每个子类又要写
原因:写到父类可以约束子类方法的命名,方便后序的查看,也避免不同子类此方法命名不一样情况
抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
抽象类不能实例化即不能创建对象
接口
接口的定义和使用
接口用关键字interface来定义
public interface 接口名 {}
接口不能实例化(不能创建对象)
接口和类之间是实现关系,通过implements关键字表示
接口中成员的特点
1.成员变量只能是常量
默认修饰符:public static final
2.没有构造方法
3.方法只能是抽象方法
接口和类之间的关系
类和类的关系
继承关系,只能单继承,不能多继承,但是可以多层继承
类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
接口和接口的关系
继承关系,可以单继承,也可以多继承
1.接口代表规则,是行为的抽象。想要让哪个类拥有~个行为,就让这个类实现对应的接口就可以了。
2.当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态。
内部类
定义:在一个类的里面,再定义一个类。举例:在A类的内部定义B类,B类就被称为内部类
类的五大成员
属性,方法、构造方法、代码块、内部类
内部类表示的事物是外部类的一部分,内部类单独出现没有任何意义
比如上面的发动机,独立出来没有太大的意义
内部类的访问特点
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象
成员内部类
写在成员位置的,属于外部类的成员,比如:private,默认,protected,public,static等
成员内部类可以被一些修饰符所修饰在成员内部类里面,
JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量。
静态内部类
1.静态内部类也是成员内部类中的一种
2.静态内部类只能访问外部类中的静态变量和静态方法,
如果想要访问非静态的需要创建外部类的对象。
创建静态内部类对象的格式:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
调用静态方法的格式:
外部类名.内部类名.方法名();
局部内部类
1.将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。
2.外界是无法直接使用,需要在方法内部创建对象并使用。
3.该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
匿名内部类(重点)
1.什么是匿名内部类?
隐藏了名字的内部类,可以写在成员位置,也可以写在局部位置
3.格式的细节
包含了继承或实现,方法重写,创建对象。
整体就是一个类的子类对象或者接口的实现类对象
4.使用场景
当方法的参数是接口或者类时以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以用匿名内部类简化代码