继承/多态/权限修饰符/包/final
封装:
对象代表什么,就得封装对应的数据,并提供数据对应的行为
继承:
Java只支持单继承,不支持多继承,但支持多层继承--每一个类都直接或间接的继承于Object
-
权限修饰符 - private
被私有,只能在本类中访问
子类只能访问父类中非私有的成员
-
构造方法:
父类的构造方法不能被子类继承 - 如果子类可以继承,违背了方法的构造规则(比如重名)
子类中所有的构造方法默认先访问父类中的无参构造,再执行自己
子类的构造方法第一行会默认有一个super(),不写也会存在 -这就是为什么如果删掉父类的空参构造方法,子类的空参构造方法会报错
但要调用父类的有参构造,就要手动写super,并且必须在第一行
public class fu {
private String name;
private int age;
public fu() {}
public fu(String name,int age){
this.name = name;
this.age = age;
}
}
class zi extends fu{
private String gender;
public zi(){}
public zi(String name,int age,String gender){
super(name,age);
this.gender = gender;
}
}
-
成员变量
不管是私有的还是非私有的,子类都可以继承父类
但是私有的成员变量子类不能直接使用(set和get方法)
访问特点
就近原则:使用最近的一个变量
(局部 -> 本类 -> 父类)
this > 本类的变量
super > 父类的变量
System.out.println(name); //从局部开始往上找
System.out.println(this.name); //从本类成员开始往上找
System.out.println(super.name); //从父类成员开始往上找
-
成员方法:
如果方法可以被添加到虚方法表,就可以被继承,否则不能被继承
虚方法表:
非private/static/final的方法 父类会放进虚方法表给子类继承,子类会在此基础上再添加自己类中的虚方法给下一个子类
访问特点:
同访问成员变量一样,采用就近原则
方法的重写:
当父类的方法不能满足子类现在的需求,需要进行方法重写
只有被添加到虚方法表的方法,才能被重写
重写的方法尽量和父类保持一致
建议重写的方法都加上@Override
public class fu {
public void tell(){
System.out.println("父类说话");
}
}
class zi extends fu{
@Override
public void tell(){
System.out.println("子类说话");
}
}
多态
父类类型 变量名 = new 子类类型();
定义方法的时候使用父类型作为参数可以接受所有子类对象
调用成员变量
会先看父类有没有这个变量,如果没有就会报错,运行代码实际获取的就是父类中成员变量的值
调用成员方法
编译的时候也会看父类中有没有这个方法,但实际运行会子类的方法
如果父类没这个方法,就无法调用子类特有的方法,这个时候想要调用就要把对象类型转换为子类类型
子类 变量名 = (子类) 变量名;
jdk14新特性
if(a instanceof Zi b)
先判断a是不是Zi类型,如果是,就强转成Zi类型,转换后变量名为b
权限修饰符
private < 默认 < protected < public
| 修饰符 | 同一个类中 | 同一个包中其他类 | 不同包下的子类 | 不同包下的无关类 |
|---|---|---|---|---|
| private | √ | |||
| 默认 | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
包
包就是文件夹,用来管理各种不同功能的java类
final修饰
- 方法:表明该方法是最终方法,不能被重写
- 类:表明是最终类,不能被继承
- 变量:表明是常量,只能被赋值一次
-基本类型:存储的数据值不能发生改变
-引用类型:存储的地址值不能发生改变,但对象内部的数据可以改变

浙公网安备 33010602011771号