继承/多态/权限修饰符/包/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修饰

  • 方法:表明该方法是最终方法,不能被重写
  • 类:表明是最终类,不能被继承
  • 变量:表明是常量,只能被赋值一次

​ -基本类型:存储的数据值不能发生改变

​ -引用类型:存储的地址值不能发生改变,但对象内部的数据可以改变

posted @ 2023-03-05 22:07  陈等闲  阅读(63)  评论(0)    收藏  举报