Java 继承与多态

1.子类与父类

  • 子类:由其他类派生出来的类,父类:包含一些共同特征。
  • 子类继承父亲的所有非私有成员。
  • 子类只能继承一个父亲
  • 子类可以直接调用父类的非私有方法。

2.继承语法extend

public class Margicion extends Role {
    @Override
    public void showfight(){
        System.out.println("挥剑攻击");
    }
}
  • 该子类继承自角色。
  • 设计类的继承关系:把一些对象的共用特征放入父类,把子类特有的特征放入子类。

3.超级父类Object

  • Object是所有子类的父类:如果定义类时候没有说明继承自哪个类那么说明它默认继承自Object。

4.覆盖方法

  • 当子类用覆盖方法时候,父类的方法会被屏蔽。
  • 可以通过覆盖方法写出一些带有子类自己特征的方法。
  • 子类覆盖方法时候不能降低父类该方法的可见性。
  • 子类覆盖方法的返回值、方法名、参数都要相同。
  • 覆盖与重载的区别:
    • 重载:同一个类里有至少两方法使用同一个方法名,但它们的参数不同,编译器会根据传参来判断使用什么方法。
    • 覆盖:指子类重定义父类已有的方法从而体现子类自己的行为。

5.super关键字

  • 子类中的属性名与父类中的属性名一样时候,父类的属性被屏蔽,但并不代表不存在。可以使用super关键词访问。
  • public class Margicion extends Role {
        int blood=1;
        @Override
        public void showfight(){
            System.out.println("挥剑攻击");
            System.out.println(super.blood);
            System.out.println(blood);
        }
        public Margicion(String name ,int blood ,int alt){
            this.alt=alt;
            super.blood=blood;
            this.name=name;
        }
    }

    这里给父类的blood赋值。

  • 子类可以使用super调用父类构造器

       

6.父类构造器

  • 创建子类时,父类构造器无论如何都会被调用
  • 调用父类构造器的super语句必须放在子类构造器的第一行
  • 如果子类构造器没有显式的调用父类的构造器则会默认调用无参构造器,如果父类没有无参构造器(有有参构造函数,但没有定义无参构造函数)则会报错。

7.多态

  • 子类 is-a 父类  
    • 可以用父类类型变量指向子类类型对象
      shape cir=new Circle(10.0);
    • 但父类变量不能操作子类特有的方法,例如不能cir.getRadius.但可以通过类型转换调用
  • 动态绑定:对于子类覆盖的方法,JVM会根据调用方法的实际对象类型来决定调用哪个方法。

8.instanceof关键字

  •  功能:测试对象的实际类型。返回值:boolean类型

                 

9.abstract抽象类

  • 使用abstract的累
  • 不能被实例化,只能作为父亲
  • 只有声明没有实现方法:public abstract double getArea();
  • 如果类只有部分抽象方法,那也是抽象类

10.访问控制符

       

 

posted @ 2023-09-16 16:31  时之彼岸Φ  阅读(27)  评论(0)    收藏  举报