封装
封装逻辑、封装数据
定义:也叫信息隐藏。把所有字段用private修饰,然后用public的setter和getter提供方法给用户使用
好处:安全,限制用户输入的值,只读、只写、可读可写
继承
作用:提高代码复用性
Java里面类只允许单继承
继承关系:UML称为泛华关系。父类(基类、超类),子类(派生类)
测试判断关系是否成立:“IS-A”关系----判断继承 “HAS-A”关系----判断是否是字段 “DOES”关系----判断方法 “LIKE-A”关系----接口
extends关键字:子类extends继承父类 格式为: public class 类名 extend 父类名
object类:所有类的跟类
final:声明类是最终类,不能被继承
super关键字:1.子类调用父类成员的成员,使用super.成员 2.子类构造器中调用父类的构造器,用super()
this()和super()引用的使用规则:1.当成员是从父类继承过来时,this和super都可以 2.当成员是子类成员特有的时候,用this 3.当调用父类被重写的方法,用super this和super:必须放在构造器代码的第一行
this:对一个对象的默认引用
强制子类调用父类的构造器:在父类里声明一个有参构造器,子类里就必须至少有一个构造器,并且在所有构造器里使用super()显示调用父类的构造器 子类的实例化过程(有继承关系,然后new子对象时,发生了什么):
1.加载父类,执行父类的静态初始化块
2.加载子类,并执行子类中的静态初始化块
3.进入子类的构造器,执行第一行的super()
4.执行父类的实例初始化块
5.进入父类的构造器,执行父类构造器的语句
6.返回子类的构造器,执行子类的实例初始化块
访问权限控制:
1.private只能访问同一个类中
2.默认修饰符,只能访问同一个类和同一个包中
3.protected,可以访问同一个类、同一个包中和它的子类中
4.public,可以访问任何地方
static静态变量:1.成员变量:静态变量,可以直接通过类名访问 2.成员方法:静态方法,可以直接通过类名访问 3.代码块:静态代码块,当java虚拟机加载类时,就会执行代码块 4.在内存中只有一个拷贝 5.类内部,可在任何方法内直接访问静态变量 6.其他类中,可以直接通过类名访问类成员的访问控制 7.能被其他类的所有实例共享,可作为实例之间进行交流的共享数据
子类访问父类成员:1.访问父类方法:super.print(); 2.访问父类属性:super.name; 3.访问父类构造方法:super(); super(name); 7.执行子类的第一行super之后的其他语句
多态 概念:对象具有多种形态的能力,
前提条件:
1.必须有方法重写
2.必须有继承或方法实现
3.父类型引用变量指向子类型的对象
背后的机制:动态绑定机制
多态绑定的概念:方法调用时与哪个类关联
多态绑定的分类:1.静态绑定:早绑定,编译期。字段、构造器、以及非实例方法(private、final)
2.动态绑定:晚绑定,运行期。针对实例方法
口诀:对于实例方法,编译时看左边,运行时看右边 对于其他的,编译时和运行时都看左边
多态的优点:扩展性强
多态的应用:多态参数、异构集合
多态的弊端:父类的引用变量无法访问子类特有的属性和方法 解决方法:向下转型-->(强制类型转换运算符) 类型不匹配:intanceof运算符判断引用变量的具体类型(必须满足父类引用指向子类对象,
抽象
抽象类:用关键字abstract修饰
abstract:声明类为抽象,如果没有,就声明一个普通类 抽象类不能实例化,不能被static和private修饰 子类必须重写父类定义的抽象方法,除非子类本身是一个抽象类
JDk8以前的都是 JDK8以后的多了静态方法(static void)和默认方法(default void)
接口 语法声明:用关键字interface声明,用implements关键字实现,其他的跟类相似
与类之间的关系:1.具体类可以实例化,接口不能被实例化 2.类只能继承一个类,一个类可以继承多个接口 3.类二个实现接口,