3.8、抽象类

  1. 3.8、抽象类(重点)

3.8、抽象类(重点

抽象类:包含一个抽象方法的类称为抽象类,抽象方法是只声明而未实现的方法,所有的抽象方法必须使用abstract关键字声明,所有的抽象类也需要使用abstract关键字声明。

abstract class A{
    public abstract void fun();
}
public class Demo{
    public static void main(String args[]){
        A a =null;	//声明对象	
        a = new A();	//出错了
    }
}

对于抽象类而言,不能直接进行实例化的操作,但是可以声明,如果想要使用抽象类,则必须依靠子类,抽象类是必须被子类继承的,而且被继承的子类需要实现抽象类中的全部抽象方法。

abstract class A{
    public abstract void fun();
}
class B extends A{
    public void fun(){	//覆写方法时需要注意访问控制权限
        System.out.println("hello world!!!");
    }
}
public class Demo{
    public static void main(String args[]){
       B b = new B();
    }
}

思考:

  • 抽象类是否能使用final声明呢?
    • 抽象类必须被子类继承
    • 被final声明的类不能有子类
  • 抽象类中能不能存在构造方法?
abstract class A{
    public A(){		//构造方法
        System.out.println("**********************");
    }
    public abstract void fun();
}
class B extends A{
    public B(){
        super();
        System.out.println("=======================");
    }
    public void fun(){	//覆写方法时需要注意访问控制权限
        System.out.println("hello world!!!");
    }
}
public class Demo{
    public static void main(String args[]){
       B b = new B();
    }
}

抽象类中允许有构造方法,但是此构造方法是不能直接调用的,是交给子类去调用的,子类对象的实例化过程中,永远是先调用父类中的构造方法。

实际上来讲,抽象类就是比普通类多了一个抽象方法而已。

abstract class A{
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public A(String name){		//构造方法
        this.name = name;
    }
    public abstract void fun();
}
class B extends A{  //继承抽象类
    public B(String name){
        super(name);
    }
    public void fun(){	//覆写方法时需要注意访问控制权限
        System.out.println(super.getName());
    }
}

public class Demo02 {
    public static void main(String args[]) {
        B b = new B("张三");
        b.fun();
    }
}

抽象类中的属性如果想要初始化,则肯定还是依赖于构造方法。


转载请注明来源