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/
原文地址:https://www.cnblogs.com/iwehdio/p/12230397.html