fantasticDream

面向对象编程----抽象类_抽象方法

为什么需要抽象类?如何定义抽象类

是一种模板模式。抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展。

通过抽象类,可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。

要点:

  有抽象方法的类只能定义能抽象类

  抽象类不能实例化,及不能用new来实例化抽象类。

  抽象类可以包含属性,方法,构造方法但是构造方法不能用来new实例,只能用来被子类调用

  抽象类只能用来继承。

  抽象方法必须被子类实现

package cn.bjsxt.oop.abstractClass;
/**
* 测试 abstract 抽象类
Abstract class
* @author 神奇的梦
* abstract 抽象
* 抽象类的意义在于:被子类继承
* 如果没有子类,抽象类是没有意义的,建不了对象所以没有意义
*
* 抽象类重要意义:
* 将方法的设计和方法的实现分离了!
* 把设计跟实现分开了!
* 设计的含义是:这个类应该有哪些方法
* 就是这个方法叫什么名字,有什么返回值,有什么形参可以设计好,
* 但是具体怎么做,留给子类去完成
*
* 实现的含义是:就像具体的方法体
*/
//包含了抽象方法的类,一定是抽象类
//抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展
public abstract class Animal {
String str;
// 抽象方法:没有实现,只有定义,只有声明.
public abstract void run();
// 抽象类里面加了抽象方法,也可以加普通方法
// breath 呼吸
public void breath() {
System.out.println("34");
// 到时候调的时候肯定是调子类对象,多态嘛 后面的run()肯定是子类的run():
run();
}
// 说明可以被定义,但是调不了
// 抽象类可以包含属性,方法,构造方法,
// 但是构造方法不能用来new实例,只能用来被子类调用。
public Animal(){
System.out.println("创造一个动物");
}

}

// 规范固定: 类型 cat 必须实现继承的抽象方法 animal.run ()
// 如果不实现抽象类编译通不过
class Cat extends Animal {
// 通过抽象类,可以避免子类设计的随意性。严格限制子类的设计
// @Override是注解,JDK5.0以后新加的,如果加了之后run就不能改名了
@Override
// 抽象方法必须被子类实现,不实现编译器会报错
public void run() {
System.out.println("猫步小跑!");
}


// 点击左边黄色提示,有四个提示方法:
// 1.增加没有实现的方法
// 2.把Cat也定义为抽象类,意味着抽象类也可以继承另一个抽象类

// 可以说基本上每一个子类都需要重写父类的 某些方法,
}

class Dog extends Animal{

@Override
public void run() {
System.out.println("狗跑!");
  }
}

package cn.bjsxt.oop.abstractClass;

public class Test {
public static void main(String[] args) {
// 无法实例化动物类型(抽象类)
// 抽象类不能实例化,及不能用new来实例化抽象类。
// Animal c=new Animal();
// Animal抽象类可以作为一个类型
Animal a=new Cat();
a.breath();
// 先到执行Animal的构造类,然后breath()方法,
// 再调用this对象Cat
  }
}

posted on 2022-06-02 17:29  神奇的梦  阅读(63)  评论(0)    收藏  举报

导航