Java基础巩固系列 抽象(abstract)(⭐)

本文详细介绍了Java中抽象类和抽象方法的概念及其使用方法。包括抽象类的特点、如何定义抽象方法、子类如何重写抽象方法等内容。通过具体代码示例展示了抽象类和抽象方法的应用场景。

abstract:翻译中文意思是抽象的,可以用来修饰类、方法

 

分类:1)抽象类   2)抽象方法

 

abstract修饰类:抽象类

1) 不可被实例化

2)抽象类有构造器(凡是类都有构造器)

3)抽象方法所在的类,一定是抽象类。

4) 抽象类中可以没有抽象方法

    当我们设计一个类,不需要创建此类的实例的时候,就可以考虑将其设置为抽象的,由其子类实现这个类的抽象方法以后,进行实例化

 

abstract修饰方法:抽象方法

1) 格式:没有方法体,包括{}. 如:public abstract void eat();
2)抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法
3)若子类继承抽象类,并重写了所有的抽象方法,则此类是一个“实体类”,即可以实例化
4)若子类继承抽象类,没有重写所有的抽象方法,意味着此类中仍有抽抽象方法,则此类必须声明为抽象的!

 

代码示例1:

public class TestAbstract {
    public static void main(String[] args) {
//        Person p1 = new Person("");
//        p1.eat();

        Student s = new Student();
        s.eat();

        Person p = new Student();
        p.eat();
    }
}

abstract class Creator{
    abstract void breath();
}

abstract class Person extends Creator{
    String name;

    public abstract void eat();//保留功能没有具体实现
    public abstract void walk();

    public String getName() {   //也可以存在有具体实现的方法
        return name;
    }

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

    public Person() {

    }

    public Person(String name) {
        this.name = name;
    }
}

class Student extends Person {

    @Override
    public void eat() {
        System.out.println("学生在吃饭");
    }


    @Override
    public void walk() {
        System.out.println("学生在走路");
    }

    @Override
    void breath() {
        System.out.println("学生在呼吸");
    }
}

abstract class Worker extends Person {
    @Override
    public void eat() {
        System.out.println("工人在吃饭");
    }

//    @Override
//    public void walk() {
//
//    }

}

class Animal{
    //不是抽象方法
    public void sleep(){

    }
}

结果:

学生在吃饭
学生在吃饭

 

代码示例2:

//abstract 不能用来修饰属性、构造器、private、final、static
public class TestAbstract1 {

}

abstract class A1{
//    abstract int name;  属性不可覆盖,没有任何意义


//    public abstract A1() {   构造器不能被重写
//
//    }

//    private abstract void method1();  子类不能覆盖(或重写)声明为private的方法的

    //关键字本身就矛盾,final是希望不被重写,而abstract是希望被重写
//    public abstract final void method2();

//    static可以通过类来调用,但这个连方法体都没有也将产生矛盾
//    public abstract static void method3();
}

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值