Java第二阶段---13抽象类和接口---第一节 抽象类

1.概念

抽象类是被声明为abstract的类-它可能包含也可能不包含抽象方法。抽象类不能被实例化(内部类相关,即不能直接new它本身),但是可以被子类化(也就是可以被继承)。

抽象类定义语法

public abstract class 类名{//定义一个抽象类

}

抽象方法定义语法

访问修饰符 abstract 返回值类型 方法名(参数列表);//知道要做一件事情,但不知道具体怎么去做这件事情

2.抽象类应用场景

一般来说,描述抽象的事物就需要使用抽象类。比如动物、设备、几何图形等。

package com.cyx.abstractclass;

public abstract class Animal {
    //抽象方法是没有方法体的。因为方法体就是表示知道具体怎么去做这件事情。
    public abstract void eat();
}
package com.cyx.abstractclass;

public class Panda extends Animal{

    @Override//不写抽象重写方法的话就要把这个类定义为抽象类
    public void eat() {
        System.out.println("熊猫吃竹叶");
    }
}

package com.cyx.abstractclass;

public class Tiger extends Animal {

    @Override
    public void eat() {
        System.out.println("老虎吃肉");
    }
}

package com.cyx.abstractclass;

public class AnimalTest {

    public static void main(String[] args) {
        Animal a1 = new Panda();
        a1.eat();
        Animal a2 = new Tiger();
        a2.eat();
    }

}

如果一个类继承于一个抽象类,那么该类必须实现这个抽象类中的所有抽象方法,否则,该类必须定义抽象类

抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类

设备

package com.hyx.device;

public abstract class Device {

    public abstract void work();//知道设备会工作,但不知道设备怎么工作
}

package com.hyx.device;

public class TV extends Device{

    @Override
    public void work() {
        System.out.println("电视机播放电视剧0");
    }
}

package com.hyx.device;

public class ElectronicFan extends Device {

    @Override
    public void work() {
        System.out.println("电风扇开始转起来了");
    }
}

package com.hyx.device;

public class DeviceTest {

    public static void main(String[] args) {
        Device d1 = new TV();
        d1.work();

        Device d2 = new ElectronicFan();
        d2.work();
    }
}

几何图形

package com.cyx.shape;

public abstract class Shape {

    public abstract Number perimeter();//知道几何图形能算周长,但不知道怎么算

    public abstract Number area();//知道几何图形能算面积,但不知道怎么算
}

package com.cyx.shape;

public class Rectangle extends Shape{

    private int width;

    private int length;

    public Rectangle(int width, int length) {
        this.width = width;
        this.length = length;
    }

    @Override
    public Integer perimeter() { //本来是public Number perimeter 把Number改为Integer就是协变返回值类型 这个返回值类型是父类返回值的子类
        return (length + width) * 2;
    }

    @Override
    public Integer area() {
        return length * width;
    }
}

package com.cyx.shape;

public class Circle extends Shape {

    private int radius;

    public Circle(int radius) {
        this.radius = radius;
    }


    @Override
    public Double perimeter() {//也是使用协变返回类型
        return 2 * Math.PI * radius;
    }

    @Override
    public Double area() {
        return Math.PI * radius * radius;
    }
}

package com.cyx.shape;

public class ShapeTest {

    public static void main(String[] args) {
        Shape s1 = new Rectangle(10,8);
        System.out.println(s1.area());
        System.out.println(s1.perimeter());

        Shape s2 = new Circle(10);
        System.out.println(s2.perimeter());
        System.out.println(s2.area());

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值