叨逼叨两句
成功自律一次(延迟满足)
08-(12-15):
方法重写的注意事项
- 父类中私有方法不能被重写(因为父类私有方法子类根本无法继承)
- 子类重写父类方法时,访问权限不能更低。(最好一致)
- 父类静态方法,子类也必须通过静态方法进行重写。(其实不算重写,但现象如此,多态会讲解)
- 子类重写父类声明最好一样。
override与overload的区别
- overload可以改变返回值类型,只看参数列表
- 方法重写:子类中出现了和父类中方法声明一模一样的方法,与返回值类型有关,返回值是一致或者是子父类。
- 方法重载:本类中出现的方法名一样,参数列表不同(个数、类型)的方法,与返回值类型无关。
08-(16-18):练习
package test_heima_08;public class Test_Demo04 { public static void main(String[] args){ Son s1 = new Son(); s1.test(); }}class Father{ private String name = "apple"; public String getName(){ return name; }}class Son extends Father{ public void test(){ System.out.println(this.getName());//直接调用继承自父类的getName() System.out.println(getName());//这样写等同于上面的写法 System.out.println(super.getName());//直接调用父类的getName() }}
08-(19-21):final
final修饰特点
- 修饰类:类不能被继承。
- 修饰变量:变量变成常量,只能被赋值一次。
- 修饰方法:方法不能被重写
final关键字修饰局部变量
- 基本类型:值不能被改变
- 引用类型:地址值不能被改变,但是其指向的对象中的属性可以改变。
package test_heima_08;public class Test_Demo05 { public static void main(String[] args){ final Demo05 a = new Demo05(10,"aaa"); //a = new Demo05(20,"bbb"); a.setAge(200); System.out.println(a.getAge()); final int b = 10; //b = 20; }}class Demo05{ private int age; private String name; public Demo05(int age,String name){ this.age = age; this.name = name; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } }
final修饰变量的初始化时机
- 显示初始化
class Demo { final int num = 5; // final int num; //没有使用构造方法初始化,又这样不赋值,编译器会报错,final成员变量的默认初始值是无效值。 public void print(){ System.out.println(num); }}
- 在对象构造完毕前
class Demo { final int num; public Demo(){ num = 10; } public void print(){ System.out.println(num); }}