抽象

抽象

参考黑马程序员

抽象类概述

在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类



抽象类特点

  • 抽象类和抽象方法必须使用abstract关键字修饰

    public abstract class 类名()

    public abstract void eat();

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

  • 抽象类不能实例化

    抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象多态

  • 抽象类的子类

    要么重写抽象类中的所有抽象方法

    要么是抽象类



抽象类的成员特点

  • 成员变量

    • 可以是变量

    • 也可以是常量

  • 构造方法

    有构造方法,但是不能实例化

    那么,构造方法的作用是什么呢?用于子类访问父类数据的初始化

  • 成员方法

    可以有抽象方法:限定子类必须完成某些动作

    也可以有非抽象方法:提高代码复用性



代码

Animal类

//抽象类
public abstract class Animal {

   private String name;
   private int age = 20;
   private final String city = "青岛";

   //可以有抽象方法
   public Animal() {
  }

   public Animal(int age, String name) {
       this.age = age;
       this.name = name;
  }

   public String getName() {
       return name;
  }

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

   public int getAge() {
       return age;
  }

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

   //抽象方法
   public abstract void eat();

   //普通方法
   public void sleep(){
       System.out.println("睡觉中。。。");
  }

   public void show(){
       age = 40;
       System.out.println(age);
//       city = "北京";
       System.out.println(city);
  }
}

Cat类

public class Cat extends Animal{

   public Cat() {
  }

   public Cat(int age, String name) {
       super(age, name);
  }

   //重写抽象方法
   @Override
   public void eat() {
       System.out.println("猫吃鱼啊");
  }
}

AnimalDemo类

public class AnimalDemo {

   public static void main(String[] args) {
       Animal cat = new Cat();
       cat.eat();
       cat.sleep();
       cat.show();
       System.out.println("===============================");

       cat.setAge(18);
       cat.setName("加菲");
       System.out.println(cat.getAge()+","+cat.getName());
       cat.eat();
       cat.sleep();
       cat.show();
       System.out.println("===============================");

       Animal cat1 = new Cat(17,"bob");
       System.out.println(cat.getAge()+","+cat.getName());
       cat.eat();
       cat.sleep();
       cat.show();
       System.out.println("===============================");
  }
}

 

 

 

posted @ 2021-03-16 09:30  i爱在西元前  阅读(47)  评论(0)    收藏  举报