继承extends
私有成员不能被继承
总结:子类方法中,使用变量的原则是:就近原则
1 package review06; 2 /* 3 私有成员不能被继承 4 子类和父类有同名的成员变量:在子类的方法中,优先使用子类的成员变量 5 当子类的方法中有和成员变量重名的局部变量时,优先使用局部变量 6 总结:子类方法中,使用变量的原则是:就近原则 7 8 */ 9 class Father{ 10 private int num = 10;//私有成员变量不能被继承 11 int num1 = 11; 12 public void method(){ 13 int num2 = 2; 14 System.out.println(num2); 15 } 16 } 17 class Son extends Father{ 18 int num1 = 12; 19 public void show(){ 20 num1 = 13; 21 System.out.println(num1); 22 } 23 } 24 public class ExtendsDemo2 { 25 public static void main(String[] args) { 26 Son s = new Son(); 27 s.show(); 28 s.method(); 29 30 } 31 }
this super final 关键字
this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
super 关键字 父类对象内存空间的标识
子类创建对象时,为什么还需要把父类也在一片空间中创建出来???
就是由于子类对象有可能使用到父类的成员变量,
而父类的成员必须在堆内存中存在,所以父类对象必须被首先创建出来
而这个过程是虚拟机自动完成的./*
super的应用
构造方法不能被继承
super(...):显式的去调用父类的带参构造方法
子类的所有构造方法,默认情况下,第一条语句都是super();
一旦父类提供了任何构造方法,就没有默认的空参构造,super()出错.
解决方法:
1.手动提供空参构造
2.使用super调用父类的其它构造方法
*/
final 修饰类:终极类,不能被继承
final 修饰成员方法:不能被覆盖(重写)
final 修饰变量:只能被赋值一次(自定义常量)
final修饰的有三个地方可以赋值:
1.定义的时候就赋值
2.构造代码块中赋值
3.构造方法中赋值
abstract抽象类
抽象类:包含抽象方法的类就是抽象类
抽象方法是子类自己去实现,而父类只规定方法签名.
//实现子类
//子类如果是非抽象类的话,那么一定要实现父类中所有的抽象方法,
//但是,如果子类也是抽象类,那么可以不实现父类中所有的抽象方法
Animal dog2 = new Dog();
//dog2.show1();//向上造型,创建的对象,子类中的特有方法无法调用
1 /* 2 抽象类:包含抽象方法的类就是抽象类 3 抽象方法是子类自己去实现,而父类只规定方法签名. 4 5 */ 6 7 abstract class Animal{ 8 abstract void run(); 9 } 10 11 class Dog extends Animal{ 12 void run(){ 13 System.out.println("Dog run"); 14 } 15 } 16 17 class Cat extends Animal{ 18 void run(){ 19 System.out.println("Cat run"); 20 } 21 } 22 23 public class AbstractDemo1{ 24 public static void main(String[] args){ 25 Dog d = new Dog(); 26 d.run(); 27 Cat c = new Cat(); 28 // c.run(); 29 } 30 }
override方法重写
子类出现和父类方法签名一模一样的方法时,父类的方法被覆盖,可以super显式调用
静态方法中不能出现super/this关键字
1 /* 2 子类出现和父类方法签名一模一样的方法时,父类的方法被覆盖,可以super显式调用 3 4 */ 5 class Father{ 6 private void show(){ 7 System.out.println("Father show()"); 8 } 9 void method(){ 10 System.out.println("Father method()"); 11 } 12 static void function(){ 13 System.out.println("Father function()"); 14 } 15 } 16 class Son extends Father{ 17 private void show(){ 18 System.out.println("Son show()"); 19 } 20 void method(){ 21 super.method();// 22 System.out.println("Son method()"); 23 } 24 static void function(){ 25 // super.function();//静态方法中不能出现super/this关键字 26 System.out.println("Son function()"); 27 } 28 } 29 public class OverrideDemo1{ 30 public static void main(String[] args){ 31 Son s = new Son(); 32 s.method(); 33 s.function(); 34 } 35 }