继承中子类里的构造方法 都会默认存在一个父类的构造方法super(); { 可以自己写不然默认有一个super() }

子类的成员属性如果没有 this.会继承父类

先输出父类的构造方法 再输出本类的

如果父类上面还有父类 那么优先输出爷爷类的构造方法 从上往下输出

重载与重写

重载: 方法名相同参数表不同
重写(方法覆盖): 继承体系同,子类出现了和父类一样的方法声明(修饰符相同或更宽,返回值类型,方法名,参数列表,不能比父类抛出更对的异常)
子类中重写父类方法 返回值类型必须一致 传参不一致叫重载

区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)

权限修饰符

修饰符同一个类中同一个包中子类无关类不同包的子类不同包的无关类
private [ 私有 ]
default [ 默认 ]
protected [ 受保护的 ]
public [ 公开的 ]

final

final关键字是最终的意思 可以修饰 成员方法,成员变量 ,类

不可以被重写 不可以被继承

变量类型是基本类型: final修饰指的是基本类型的数据值不能发生改变

变量类型是引用类型: final修饰指的是引用类型的地址值不能发生改变 , 但是地址里面的内容是可以发生改变的

对于final属性系统不会提供默认值
如果final修饰实例变量 可以在初始化属性或者构造方法,动态代码块中赋值
如果final修饰类变量   可以在初始化属性或者是静态代码块中赋值

static

static 关键字是静态的意思 可以修饰 成员方法,成员变量

静态成员方法只能访问静态成员

静态内容优先于非静态

静态代码块比构造方法先执行

1 静态方法中只能直接访问静态成员(属性,方法)
  静态是随着类的加载而加载优先于对象
  非静态的属性和方法依赖于对象才能使用
  (main方法中 能直接调用的方法只有静态方法)   
2 静态方法中可以使用静态成员,也可以使用非静态成员(但是需要new 对象)
3 静态方法中 没有this关键字(this 代表当前对象 随着对象的存在而存在)

多态

父类 变量 = new 子类();

成员变量: 编译看左边,执行看左边 (父类有这个变量 才可以编译成功 执行是父类的变量结果)

成员方法: 编译看左边,执行看右边 (必须父类有这个方法才行 如果子类重写了 那么结果是子类重写后的)

因为成员方法有重写,成员变量没有

1 对象类型不变   ---> 一个对象从创建好之后它的实际类型绝对不会发生改变。你从出生就一直是一个人。。。
2 只能对引用调用其引用类型中声明的方法   -----> 说白了只能调用父类中属性和方法
3 运行时,会根据对象实际类型找子类重写之后的方法---->当子类对象放进父类引用,该引用调用方法,如果子类重写了该方法,就调用子类的。

多态中的转型

向上转型

子类引用赋值给父类引用 可以直接赋值 (向上转型)
父类引用赋值给子类引用 必须强制类型转换 虽然能保证编译通过但是运行时可能发生类型转化异常 (向下转型)
所以在强制类型转换之前 可以用instanceof判断 避免出现异常

抽象

abstract class Super{
    public abstract void method();
    
    public void method2(){} //也可以写普通方法
}

抽象无法被实例化 如要实例化可以通过子类继承重写方式实例化 ( 抽象父类中的抽象方法子类必须都要重写 否则会报错 )

我们说抽象方法只有声明没有实现,一个方法应该是有声明和实现的
抽象方法没有实现是不完整的方法,就是说你这个方法没写完 也就意味
抽象方法所在的类是个半成品所以我们推出结论
如果一个类中有抽象方法 这个类必须是抽象类,就不能再去创建对象,
但是抽象类中不一定有抽象方法 但是可有有构造方法
(构造方法不只是供本类使用,有可能供子类super()去调用)

抽象类的特点

 1 如果一个类中有抽象方法 这个类必须是抽象类,就不能再去创建对象,
 2 抽象类中不一定有抽象方法 但是可有有构造方法(构造方法不只是供本类使用,有可能供子类super()去调用)  
 3 抽象类不一定有抽象方法, 抽象方法一定方法抽象类中
 4 子类继承抽象类 如果子类不希望也成为抽象类 它就必须实现父类中声明的所有抽象方法.
 
 合法:    private   static  final 都能用  但是都不能和抽象联用
   
 不合法:  final   abstract  //不能被重写
         static  abstract  //抽象是配合多态用的  静态是没有多态的
         private abstract  //不能被继承

接口

接口用关键字interface修饰

​ public interface 接口名{}

类实现接口用implements表示

​ public class 类名 implements 接口名 {}

接口不能实例化

​ 接口如何实例化? 参照多态的方式 通过实现类对象实例化, 这叫接口多态

最后修改:2021 年 12 月 25 日
如果觉得我的文章对你有用,请随意赞赏