20.Java语言之“abstract关键字“

1.什么是抽象类

现实世界事物中,某个事物是比较概括性(人/水果/动物),描述为抽象事物,只有具体的工人/苹果/猫或者狗,才具备具体的功能;将某个事物中的一些功能仅仅给出声明即可,没有方法体----->抽象方法---->此时这个类必须为抽象类.

举例:动物都需要吃和睡
        只要看到具体的动物类:猫类/狗类,才具备吃和睡的功能
        将动物类中的吃和睡给出一个声明:加入一个关键字 abstract:抽象方法
        动物类----->抽象类

2.抽象方法的格式:权限修饰符(一般情况都是public) abstract 返回值类型  方法名(形式参数列表) ;

   抽象类的格式: abstract  class 类名{}

3.抽象类的特点:

 (1)有抽象方法的类一定是抽象类
 (2)抽象类中不一定只有抽象方法 ,还可以非抽象方法(有方法体)
 (3)抽象类不能实例化---->意思:不能创建对象
      如何实例化呢:通过具体的子类进行实例化(进行对象的创建)

      抽象类多态  Fu fu = new Zi() ;    Fu类型是抽象类型.
 (4)抽象类的子类有两种情况:
   b.目前来说:如果抽象类的子类都是抽象类---毫无意义  因为子类也不能new ,除非再有具体的子类
   a.抽象类的子类具体类--->才能new   :抽象多态的形式  Fu fu = new Zi() ;

4.抽象类的核心宗旨:

就是强制子类必须完成的事情(要将父类中的所有的抽象方法必须重写,否则报错)

5.抽象类的成员的特点:
成员变量:可以是变量,也可以是常量.
成员方法:既可以是抽象方法,必须携带abstract关键字,也可以是非抽象方法
构造方法:存在无参/有参构造方法 ------对数据进行初始化

6."抽象类和抽象方法"代码示例

//定义一个动物类
abstract class Animal{

    public  abstract void eat(); //加入关键字abstract
    public void  show(){//具体方法
        System.out.println("show animal...");
    }

    public abstract  void slepp() ;//睡

    public Animal(){ 
        System.out.println("Animal的无参构造方法");
    }
}

//具体类
 class Cat extends Animal{

    public Cat(){
        System.out.println("Cat的无参构造方法");
    }
    @Override
    public void eat() {
        System.out.println("猫吃鱼...");
    }

    @Override
    public void slepp() {
        System.out.println("猫趴着睡觉...");
    }

    //特有功能
    public void playGame(){
        System.out.println("猫玩毛线");
    }
}

class Dog extends Animal{

    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }

    @Override
    public void slepp() {
        System.out.println("狗侧着睡觉...");
    }

    //特有功能
    public void catchRabit(){
        System.out.println("狗可以抓兔子");
    }
}

//测试类
public class AbstractDemo {
    public static void main(String[] args) {

      
        //使用多态的形式: 当前的Animal类的子类一定是具体类
        Animal a = new Cat() ;//父类引用指向子类对象(父类---抽象类) : 抽象类多态
        a.eat();
        a.slepp();

        //向下转型
        Cat c = (Cat)a ;
        c.playGame();
        System.out.println("-------------------------");

        a = new Dog() ;
        a.eat();
        a.slepp();

        Dog d = (Dog) a;
        d.catchRabit();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值