学习笔记---抽象类

抽象类

1. 抽象类与抽象方法:

  • 抽象类是指在普通类的结构里面增加抽象方法的组成部分。
  • 抽象类用来描述一个类型具备的基本特征和功能,具体的实现方式以及细节由子类去重写实现
  • 抽象方法是只声明了方法,但没有方法体的方法
  • 抽象方法只能出现在抽象类中,但抽象类中可以存在其他普通方法
  • 抽象类无法创建对象,只能被子类继承后,创建子类对象
  • 子类必须重写父类中的所有抽象方法,若子类没有重写父类中的所有方法,则子类也必须定义为抽象类

2. 注意点:

  • 由于抽象类中也有一些属性,所以抽象类中也有构造器,存在目的是为了属性的初始化,子类实例化时,先执行父类构造器,再执行子类构造器
  • 抽象类不能用final声明,因为抽象类必须有子类,而final类型的类不能被继承
  • 外部抽象类不允许使用static声明,而内部的抽象类运行使用static声明。使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称

代码示例:

  • 使用static声明外部抽象类,报错
package oop.Demo07;

//报错
public static abstract class A {
    
    
    public void fun(){
    
    
        System.out.println("fun");
    }

    public abstract void print();
}

  • 使用static声明内部抽象类
package oop.Demo07;

public abstract class A {
    
    
    public static abstract class C{
    
    
        public abstract void print();
    }
}
package oop.Demo07;

public class B extends A.C{
    
    
    @Override
    public void print() {
    
    
        System.out.println("static内部抽象类");
    }
}
package oop.Demo07;

public class TestDemo {
    
    
    public static void main(String[] args) {
    
    
        A.C ac = new B();
        ac.print();     //static内部抽象类
    }
}

3. 抽象类以及方法的定义

  • 格式:
  public abstract class A {
    
    	//抽象类
      public void fun(){
    
    
          System.out.println("fun");
      }
  
      public abstract void print(); //抽象方法
  }
package oop.Demo07;

public class B extends A{
    
      //子类继承抽象类A
    @Override
    //对父类中的方法进行重写
    public void print() {
    
    
        System.out.println("子类对父类中的抽象方法重写");
    }
}
package oop.Demo07;

public class TestDemo {
    
    
    public static void main(String[] args) {
    
    
        A a = new B();
        a.print();  //子类对父类中的抽象方法重写
        a.fun();    //fun
    }
}

猜你喜欢

转载自blog.csdn.net/yang862819503/article/details/113745241