继承extends ,this super final 关键字,abstract抽象类,override方法重写

继承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 }
继承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     抽象方法是子类自己去实现,而父类只规定方法签名.
 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 }
abstract抽象类

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 }
override方法重写
原文地址:https://www.cnblogs.com/star521/p/8742888.html