Java 抽象类、抽象方法(abstract)

2018-03-28  本文已影响0人  呱呱_

抽象方法:

抽象方法示例:

//没有方法体,有abstract关键字做修饰
public abstract void xxx();

抽象类的基本概念:

抽象类示例:

//定义一个抽象类
abstract class A{

    //普通方法
    public void fun(){
        System.out.println("存在方法体的方法");
    }

    //抽象方法,没有方法体,有abstract关键字做修饰
    public abstract void print();
}

抽象类的特性和使用:

抽象类的基本使用示例:

//定义一个抽象类
abstract class A{

    //普通方法
    public void fun(){
        System.out.println("存在方法体的方法");
    }

    //抽象方法,没有方法体,有abstract关键字做修饰
    public abstract void print();
}

//单继承
//B类是抽象类的子类,是一个普通类
class B extends A{

    //强制要求覆写
    @Override
    public void print() {
        System.out.println("Hello World !");
    }

}
public class TestDemo {

    public static void main(String[] args) {
        //向上转型
        A a = new B();

        //被子类所覆写的过的方法
        a.print();
    }
}

运行结果:

Hello World !

抽象类的使用限制:

由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。
并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。

示例如下:

abstract class A{
    public A(){
        System.out.println("*****A类构造方法*****");
    }

    public abstract void print();
}

class B extends A{
    public B(){
        System.out.println("*****B类构造方法*****");
    }

    @Override
    public void print() {
        System.out.println("Hello World !");
    }
}

public class TestDemo {
    public static void main(String[] args) {
        A a = new B();
    }
}

执行结果:

*****A类构造方法*****
*****B类构造方法*****

外部抽象类不允许使用static声明,而内部的抽象类可以使用static声明。
使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称。

内部抽象类使用示例:

abstract class A{
    //static定义的内部类属于外部类
    static abstract class B{
        public abstract void print();
    }
}

class C extends A.B{
    public void print(){
        System.out.println("**********");
    }
}

public class TestDemo {
    public static void main(String[] args) {
        //向上转型
        A.B ab = new C();
        ab.print();
    }
}

执行结果:

**********

示例代码:

abstract class A{
    public static void print(){
        System.out.println("Hello World !");
    }
}

public class TestDemo {
    public static void main(String[] args) {
        A.print();
    }
}

执行结果:

Hello World !

示例如下:

abstract class A{
    public abstract void print();

    //内部抽象类子类
    private static class B extends A{
        //覆写抽象类的方法
        public void print(){
            System.out.println("Hello World !");
        }
    }

    //这个方法不受实例化对象的控制
    public static A getInstance(){
        return new B();
    }
}

public class TestDemo {
    public static void main(String[] args) {
        //此时取得抽象类对象的时候完全不需要知道B类这个子类的存在
        A a = A.getInstance();
        a.print();
    }
}

执行结果:

Hello World !

本文参考链接:Java抽象类 详解

上一篇下一篇

猜你喜欢

热点阅读