zoukankan      html  css  js  c++  java
  • Java SE入门(十)——继承与抽象

    iwehdio的博客园:https://www.cnblogs.com/iwehdio/

    1、继承

    多个类有共同的成员变量和成员方法(行为和属性),将其共性抽取到另外一个类(父类)中,再让多个类去继承这个父类,这样多个类就可以获取到父类的成员。

    • 所使用的关键字:extends

    • 格式:class LOL extends Game{}

    • Java中继承的特点:

      1. 只支持单一继承,只能继承一个父类。
      2. 支持多层继承,即可以继承父类的父类。
    • 继承中成员变量的特点:

      1. 子类可以获取父类的非私有成员,无法获取私有成员。

      2. 子类和父类的成员变量名字不同,可以直接获取父类的成员变量。

      3. 父类和子类中出现同名成员变量,按就近原则使用子类中的成员变量。

      4. super关键字,可以代表父类对象,获取父类的成员变量和成员方法。例:

        public class Demo {
            public static void main(String[] args){
                Kid k = new Kid();
                k.getName();
            }
        }
        class Dad {
            String name = "A";
        }
        class Kid extends Dad {
            String name = "B";
            public void getName() {
                String name = "C";
                System.out.println(super.name);
                System.out.println(this.name);
                System.out.println(name);
            }
        }
        /*输出为 
        A 
        B 
        C
        */
        

        输出顺序按照就近原则为:局部变量 > 子类成员变量 > 父类成员变量。

    • 继承中成员方法的特点:

      1. 方法的重写:在子父类中,子类的方法和父类的方法完全不同,子类重写(覆盖)了父类的方法。此时子类对象调用的是子类的方法。
      2. 重写后想调用父类方法同样可以用super关键字。
      3. 子类没有重写,则调用父类的方法。
    • 方法重写的应用场景:

      • 父类方法不能完全满足子类的使用。这个时候重写并用super关键字调用父类的功能。这样既保有父类的功能,也拥有子类的功能。
    • 注解:@ ,一般写在方法、类或变量上方。用于规范化描述方法、类或变量。

      • Override 表示下方的方法是重写父类方法,如果父类中没有此方法或参数列表不同会提示。
    • 方法重写的注意事项:

      1. 不能重写父类私有的方法,如果子类中方法名与父类中的私有方法相同,这两个方法也只是名称相同,没有重写关系。
      2. 满足第1条下,重写时子类的方法权限必须大于等于父类的方法权限(也就是说子类要更加开放)。
    • 继承中构造方法执行的顺序:

      1. 在有子父类继承关系的类中,创建子类对象,调用子类的构造方法。如果子类构造方法第一行代码没有调用子类或父类的构造方法,则会默认调用父类的无参构造。
      2. 可以在子类的构造方法第一行用 super(参数);调用父类的有参 / 无参构造。
      3. 可以在子类的构造方法第一行用 this(参数);调用子类的其他构造方法。
      4. 调用顺序一定是先调用父类的构造方法,因为子类的构造方法中可能会用到父类的成员变量。
    • thissuper的区别:

      • this是对当前对象的引用。可以调用子类成员方法与变量,在子类的构造方法第一行调用子类其他构造方法。
      • 当子类中没有成员变量a而父类中有时,this.a调用的是父类中的成员变量。
      • super是子类对象的父类引用(不是父类对象)。可以调用父类成员方法与变量,在子类的构造方法第一行调用父类的构造方法。
    • 继承的优缺点:

      1. 提高了代码的复用性和可维护性。
      2. 增加了类的耦合性,违反了高内聚低耦合的开发原则。
    • final关键字,修饰的类不能被继承,修饰的变量不能被修改(常量),修饰的方法不能被重写。

      final int num = 10;
      

    2、抽象

    • abstract 关键字,用于修饰抽象方法和类。

    • 抽象方法:不同类方法相似但具体内容不同,只抽取声明而没有具体的方法体。

      • 抽象方法必须在抽象类中。
      • 一个类继承抽象类,继承时必须重写所有抽象方法,除非这个类也是抽象类。(非抽象方法可以不重写)。
    • 抽象类的特点:

      • 抽象类不能创建对象,不能实例化。
      • 抽象类中可以有非抽象方法。
      • 一个类继承抽象类,要么重写所有抽象方法,要么这个类也是抽象类。
    • 抽象类的成员特点:

      1. 可以有成员变量 / 常量。
      2. 可以有抽象 / 非抽象方法。
      3. 可以有构造方法。
    • 抽象类注意事项:

      1. abstract 关键字不能与finalprivate关键字共存。
      2. 抽象类有构造方法,用于对成员变量进行初始化。
      3. 抽象类也可以没有抽象方法,用于不能被实例化的类。
    • 例:

      public class Demo {
          public static void main(String[] args) {
              BasicTeacher bt = new BacisTeacher();
              bt.teach();
          }
      }
      abstract class Teacher {
          String name;
          public abstract void teach();
      }
      class BasicTeacher {
          @Override
          public void teach() {
              System.out.println(name + "Basic");
          }
      }
      

    iwehdio的博客园:https://www.cnblogs.com/iwehdio/
  • 相关阅读:
    iptables防火墙-SNAT和DNAT
    exists & in
    系统演化之路
    promethue 采集traefik指标列表
    Grafana中变量
    Wireshark抓包
    http协议格式 基于ABNF语义定义
    Prometheus 管理常用知识点
    python时间转换
    通过salt-api获取minion的ip地址
  • 原文地址:https://www.cnblogs.com/iwehdio/p/12230397.html
Copyright © 2011-2022 走看看