Java基础篇——抽象类

抽象类

定义:抽象类前使用 abstract 关键字修饰,该类为抽象类

抽象类需要注意的几点:

1.抽象类是约束子类必须要有什么样的方法,而并不关注子类是如何实现的;

2.抽象类的应用场景:

           a) 在某些情况下,父类只是知道子类应该包含怎样的方法,但不关心这些子类如何具体实现这些方法,达到动态多态的效果;

             b) 从多个具有部分相同特征的类中,抽象出共性从而创建出抽象类,然后以这个抽象类作为子类的模板,从而避免子类设计的随机性;

3.抽象类中定义的抽象方法,只有声明,不能有实现。所以抽象方法没有方法体,而且是以分号结束,其中抽象方法必须用abstract关键字进行修饰;

public abstract class Telephone {
    //抽象方法,方法体是以分号结束,只有声明,不要具体实现;
    public abstract void call();
    
}

4.抽象类中既可以包含抽象方法,也可以包含普通方法抽象类也可以没有抽象方法

易错点:有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法;

public abstract class Telephone {
   
    public abstract void call();
    
    public void message(){
        System.out.println("这是一个抽象类中的普通方法");
    }

}
public abstract class Telephone {
    
    public void message(){
        System.out.println("这是一个抽象类中的普通方法");
    }

    public void toMessage(){
        System.out.println("没有抽象方法的抽象类");
    }
}

5.抽象类不能直接创建,因为抽象类中无具体的实现方法,所以不能用抽象类创建对象。常见解决创建对象的方法有两种,以上述 Telephone类为例:

//父类
public abstract class Telephone {

    public void message(){
        System.out.println("我是抽象类中的普通方法");
    }

    public abstract void call();
}

//子类
public class Phone extends Telephone{
    //继承了抽象类,必须重写抽象方法
    public void call(){
        System.out.println("子类重写了抽象类中的抽象方法");
    }
    public void sell(){
        System.out.println("子类可以拥有自己的私有方法");
    }
}

以上是父类和子类的定义,下面看mian函数里创建对象:

第一种方法:在创建的对象的时候就实现抽象类中的抽象方法:

public class Main {
    public static void main(String[] args) {
        Telephone t = new Telephone() {
            @Override
            public void call() {
                System.out.println("第一种创建抽象类对象的方法");
            }
        };
        t.call();
    }
}

         运行结果:第一种创建抽象类对象的方法

第二种方法:通过定义引用变量来指向子类对象:

public class Main {
    public static void main(String[] args) {
        Telephone t = new Phone();
        t.call();
    }
}

       运行结果:子类重写了抽象类中的抽象方法;

抽象类与普通类的区别

区别主要有三点:

1. 抽象方法必须为public 或者 protect 。因为如果抽象方法被private修饰的方法,子类是没法实现该抽象方法。缺省的情况下默认为public;

2. 抽象类不能用来创建对象;

3. 如果一个类继承了抽象类,那么该子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则子类也定义为abstract 类

public abstract class Phone extends Telephone{

    public void sell(){
        System.out.println("子类可以拥有自己的私有方法");
    }
}

附上原文链接:https://www.cnblogs.com/hysum/p/7100874.html

猜你喜欢

转载自blog.csdn.net/zjt980452483/article/details/82682925
今日推荐