zoukankan      html  css  js  c++  java
  • 继承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方法重写
  • 相关阅读:
    linux安装源码包报错
    中间文件
    c指针复习
    gcc常用编译选项
    第008课_第1个ARM裸板程序及引申
    开发板熟悉与体验
    裸机开发步骤笔记
    linux进阶命令2
    linux进阶命令1
    vi编辑器的使用
  • 原文地址:https://www.cnblogs.com/star521/p/8742888.html
Copyright © 2011-2022 走看看