Java抽象类

抽象类

1、抽象方法:父类定义的方法,子类肯定会重写,父类中不要方法实现,只有方法的声明

没有方法体的方法就是抽象方法

有方法体的方法 public void shout(){方法体}

抽象方法public abstract void shout()

2、有抽象方法的类必须定义成抽象类

public abstract class Test{}

抽象类的使用

1、抽象类不能直接new其本身的实例,不能直接Animal an=new Animal();就如同一个未完成的设计图,不能生产产品,但是可以new其子类的实例(子类必须实现(重写父类所有的抽象方法):Animanl an=new Cat();多态的用法)

2、抽象类是用来被继承的

抽象方法是被用来子类实现的

3、子类有两种选择

1、子类必须实现(重写)父类的所有抽象方法

2、子类可以继续声明为抽象类

java 复制代码
public class Main {
    public static void main(String[] args) {


        Animal cat = new Cat();
        Animal dog = new Dog();
        Cat cat2=new Cat();
        cat.eat();
        dog.eat();
        cat2.setFood("老鼠");
        cat2.eat();


    }

}

// 定义一个父类
/**
 * Animal
 */
abstract class Animal {
    private String name;
    private int age;

    public void setAge(int age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public void call() {
        System.out.println("动物的叫声");
    }

    public void eat() {
        System.out.println("动物的食物");
    }
    // 定义抽象类
    public abstract void test();
}

/**
 *  
 */
class Cat extends Animal {
    private String food;

    public void setFood(String food) {
        this.food = food;
    }

    public String getFood() {
        return food;
    }

    public void eat() {
        System.out.println("小猫吃" + food);
    }
 @Override
 public void test() {
     // TODO Auto-generated method stub
     System.out.println("子类必须实现抽象类");
 }
}

/**
 * InnerMain
 */
class Dog extends Animal {
    private String food;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    @Override
    public void eat() {
        System.out.println("小狗吃" + food);
    }

    @Override
    public void test() {
        // TODO Auto-generated method stub
        System.out.println("实现父类的抽象方法");
    }
}
// 定义为抽象类不用实现父类的抽象方法
abstract class  Test extends Animal {

    
}

抽象类的特点

1、抽象类可以有0个或者多个抽象方法

2、抽象类中可以有成员变量,成员方法,构造方法,比具体类多抽象方法

3、抽象类首先是一个类,要遵循is 安定关系,子类是一中父类时才能继承

抽象类的作用,抽象类是一个(模板)子类必须实现父类所有的抽象方法,避免了子类设计的随意性,使子类之间更加通用

抽象类练习

计算不同图像的面建和周长

java 复制代码
public class Main {
    public static void main(String[] args) {

        Shape cc = new Circls(3.2);
        Shape sq = new Square(3.3);
        System.out.println(cc.getArea());
        System.out.println(cc.getLength());
        System.out.println(sq.getArea());
        System.out.println(sq.getLength());

    }

}

// 定义一个父类
/**
 * 定义一个抽象父类
 */

abstract class Shape {

    public abstract double getArea();

    public abstract double getLength();

}

// 定义子类实现父类的抽象方法
class Circls extends Shape {
    private double r;// 半径
    static final double PI = 3.14;

    // 定义无参构造
    public Circls() {

    }

    // 定义有参构造
    public Circls(double r) {
        this.r = r;
    }

    @Override
    public double getArea() {
        double area = PI * Math.pow(r, 2);
        return area;
    }

    @Override
    public double getLength() {
        // TODO Auto-generated method stub
        double length = 2 * PI * r;
        return length;
    }

}

// 子类实现
class Square extends Shape {
    private double length;

    // 定义无参构造
    public Square() {

    }

    // 定义有参构造
    public Square(double length) {
        this.length = length;
    }

    @Override
    public double getArea() {
        // TODO Auto-generated method stub
        double area = Math.pow(length, 2);
        return area;
    }

    @Override
    public double getLength() {
        // TODO Auto-generated method stub
        double length = 4 * this.length;
        return length;
    }

}
相关推荐
北冥you鱼1 小时前
Go 语言空接口(interface{})使用场景与最佳实践
开发语言·windows·golang
for_ever_love__1 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
java资料站1 小时前
五、Spring AI Alibaba · Memory · Saver(短期会话)
java·spring·microsoft
xh didida1 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++
个 人 练 习 生2 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
2601_966949652 小时前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
坤坤子吖2 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
奋斗的阿狸_19862 小时前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发
夜之眷属2 小时前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
weixin199701080162 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存