继承extends
私有成员不能被继承
总结:子类方法中,使用变量的原则是:就近原则
1 package review06; 2 /* 3 私有成员不能被继承 4子类和父类有同名的成员变量:在子类的方法中,优先使用子类的成员变量 5当子类的方法中有和成员变量重名的局部变量时,优先使用局部变量 6 总结:子类方法中,使用变量的原则是:就近原则 78 */ 9 class Father{10private int num = 10;//私有成员变量不能被继承11int num1 = 11;12public void method(){13 int num2 = 2;14 System.out.println(num2);15}16 }17 class Son extends Father{18int num1 = 12;19public void show(){20 num1 = 13;21 System.out.println(num1);22}23 }24 public class ExtendsDemo2 {25public static void main(String[] args) {26 Son s = new Son();27 s.show();28 s.method();29 30}31 }
继承extends
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抽象方法是子类自己去实现,而父类只规定方法签名. 45 */ 6 7 abstract class Animal{ 8abstract void run(); 9 }10 11 class Dog extends Animal{12void run(){13 System.out.println("Dog run");14}15 }16 17 class Cat extends Animal{18void run(){19 System.out.println("Cat run");20}21 }22 23 public class AbstractDemo1{24public static void main(String[] args){25 Dog d = new Dog();26 d.run();27 Cat c = new Cat();28 // c.run();29}30 }
abstract抽象类
override方法重写
子类出现和父类方法签名一模一样的方法时,父类的方法被覆盖,可以super显式调用
静态方法中不能出现super/this关键字
1 /* 2子类出现和父类方法签名一模一样的方法时,父类的方法被覆盖,可以super显式调用 34 */ 5 class Father{ 6private void show(){ 7 System.out.println("Father show()"); 8} 9void method(){10 System.out.println("Father method()");11}12static void function(){13 System.out.println("Father function()");14}15 }16 class Son extends Father{17private void show(){18 System.out.println("Son show()");19}20void method(){21 super.method();//22 System.out.println("Son method()");23}24static void function(){25 // super.function();//静态方法中不能出现super/this关键字26 System.out.println("Son function()");27}28 }29 public class OverrideDemo1{30public static void main(String[] args){31 Son s = new Son();32 s.method();33 s.function();34}35 }
override方法重写