01 代码块
- 在Java中,用{ }括起来的代码被称为代码块
- 分类
- 局部代码块
- 在方法中出现,限定变量生命周期,及早释放。提高内存利用率
- 构造代码块
- 在类中方法外出现,多个构造方法中相同的代码存放在一起,每次调用构造方法时都在构造方法前执行
- 静态方法快
- 在类中方法外出现,用于给类初始化,在类加载时执行,且只执行一次
- 局部代码块
02 继承的好处和弊端
- 好处
- 提高了代码的复用性和可维护性
- 让类与类之间产生了联系,是多态的前提
- 弊端
- 增强了类的耦合性
03 Java继承的特点
- Java只支持单继承,不支持多继承(一个子类最多有一个父类)
- Java支持多层继承
04 继承的注意事项
- 子类只能继承父类的所有非私有成员
- 子类不能继承父类的构造方法,但能通过super关键字去访问父类的构造方法
05 this和super的区别和应用
- this和super分别代表什么
- this代表当前对象的引用
- super代表当前对象父类的引用
- this和super使用的区别
- 当子类的成员变量或成员方法与父类的重名时,使用super调用父类的成员变量或方法
- this(参数); //调用子类的构造方法
- super(参数); 调用父类的构造方法
06 继承中构造方法的关系
- 子类中所有的构造方法都默认访问父类中空参数的构造方法
- 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
- 每一个构造方法的第一条语句默认都是
super();
Object类是最顶层的父类。
07 继承代码详解
看程序写结果1
class Fu { public int num = 10; public () Fu{ System.out.println("fu"); } } class Zi extends Fu{ public int num = 20; public Zi(){ System.out.println("zi"); } public void show(){ int num = 30; System.out.println(num); System.out.println(this.num); System.out.println(super.num); } } class Test1_Extends { public static void main(String[] args) { Zi z = new Zi(); z.show(); } }
看程序写结果2
class Fu { static { System.out.println("静态代码块Fu"); } { System.out.println("构造代码块Fu"); } public Fu() { System.out.println("构造方法Fu"); } } class Zi extends Fu { static { System.out.println("静态代码块Zi"); } { System.out.println("构造代码块Zi"); } public Zi() { System.out.println("构造方法Zi"); } } Zi z = new Zi(); 请执行结果。
08 方法重写
- 概述
- 子父类出现了一模一样的方法
- 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。
- 注意事项
- 父类中的私有方法不能重写
- 因为父类的私有方法子类根本无法继承
- 子类重写父类方法时,访问权限不能更低
- 最好一致
- 子类重写父类方法的时候,最好声明一模一样。
- 父类中的私有方法不能重写
09 方法重写和方法重载的区别
- 方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
- 方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型。
10 final关键字
- 特点
- 修饰类,类不能被继承
- 修饰变量,变量变成常量,只能被赋值一次
- 修饰方法,方法不能被重写
- 修饰局部变量
- 基本类型,是值不能被改变
- 引用类型,是地址值不能被改变,对象中的属性可以改变