抽象类的语法及特性

抽象类的语法以及特性

概念

抽象类顾名思义听起来就很抽象,那我们能否具体的描述出一个抽象的对象呢?答案当然是否定的,所以如果一个类中没有足够的信息能够描述一个对象,那么这个类就是一个抽象类。因此抽象类是无法直接实例化出一个对象的。
那么抽象类存在的意义在哪?
在重写当中,父类当中的方法,被子类重写,在动态绑定的过程中,会产生不同的结果,实际的工作几乎都是由子类中的重写的方法完成的,因此可以把父类当中的方法写为抽象方法。

语法

被abstract修饰的类就叫做抽象类,同理被abstract修饰的方法就叫抽象方法,在抽象类中也可以加普通的方法和字段。
父类:

public abstract class Shape {
    public abstract void draw();//抽象方法
}

子类:

public  class circle extends Shape {
    @Override
    public void draw() {
        System.out.println("⚪");
    }
}
public class Triangle extends Shape{
    @Override
    public void draw() {
        System.out.println("🔺");
    }
}
public class Rect extends Shape{
    @Override
    public void draw() {
        System.out.println("♦");
    }
}

主函数:

public class TestShape {
    public static void printShape(Shape a){
        a.draw();
    }
    public static void main(String[] args) {
       // Shape shape=new Shape();//shape是一个抽象类无法被实例化
       printShape(new circle());//匿名对象
       printShape(new Rect());
       printShape(new Triangle());

    }
}

特性

一、由于抽象类肯定是要被继承的,因此抽象类不能被final修饰的(被final修饰无法被继承);
在这里插入图片描述
二、由于抽象方法肯定是要被重写的,因此抽象方法是不能被final,static,private修饰的(没有访问限定符时默认时public);
三、若是子类不重写父类当中的抽象方法,则子类也是抽象类,必须要用abstract修饰,不管怎么样,只要其他类再次继承,就必须重写继承下来的抽象方法
eg:

public abstract class Animal {
    String name;
    int age;
    public abstract void var();
}
public abstract class Cat extends Animal {
    public abstract void price();
}
public class Rogdoll extends Cat{
    public Rogdoll(String name,int age){
        this.name=name;
        this.age=age;

    }
    @Override
    public void var() {
        System.out.println("布偶猫");
    }

    @Override
    public void price() {
        System.out.println("20000");

    }
}
public class TeatDemo {
    public static void kinds(Animal a){
        a.var();
    }
    public static void prices(Cat b){
        b.price();
    }
    public static void main(String[] args) {
        kinds(new Rogdoll("玛卡巴卡",3));
        prices(new Rogdoll("玛卡巴卡",3));

    }
}

在第三个.java文件中我们看到当我们要使用前面继承下来的抽象方法时必须要重写所有累积下来的抽象方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值