面向对象编程----抽象类_抽象方法
为什么需要抽象类?如何定义抽象类
是一种模板模式。抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展。
通过抽象类,可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。
要点:
有抽象方法的类只能定义能抽象类
抽象类不能实例化,及不能用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
}
}
本文来自博客园,作者:神奇的梦,转载请注明原文链接:https://www.cnblogs.com/fantasticDream/p/16338539.html
浙公网安备 33010602011771号