抽象类和抽象方法

来源:互联网 发布:hd电视直播软件 编辑:程序博客网 时间:2024/06/17 13:31

Java抽象类和抽象方法



Abstract类与abstract方法


用关键字abstract修饰的类称为abstract类(抽象类)。如:

abstract class A {

 …

}

用关键字abstract修饰的方法称为abstract方法(抽象方法),例如:

abstract int min(int x,int y);



注意事项


1、和普通的类相比,abstract类可以有abstract方法,也可以有非abstract方法。

2、对于abstract类,我们只能声明,不能使用new运算符创建该类的对象。如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的抽象的方法,给出方法体。

3、abstract类也可以没有abstract方法。

4、如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承这个abstract方法。

5、对于abstract方法,只允许声明,不允许实现。

 

示例:


A.java

public abstract class A {


void eat(){

System.out.println("eat");    //非抽象类方法

}

abstract int getMax();    //抽象类方法,没有方法体

}

 

主类Demo25

不能进行初始化,因为A是一个抽象类,抽象类不能直接调用它的构造方法产生对象


java1.png 

 

新建一个B类继承于A

B继承A必须重写


java2.png 

 

B.java继承了A后,实现的抽象方法

public class B extends A{

 

@Override

int getMax() {

int a =10;

int b = 20;

if(a>b){

return a;

}else {

return b;

}

}

}

 


抽象类和抽象方法与多态紧密的结合


定义一个父类Car


public abstract class Car {

abstract void cautionSound();

}

 

定义子类PoliceCar


public class PoliceCar extends Car{

 

@Override

void cautionSound() {

System.out.println("zhua...zhua...zhua");

}

}

 

定义子类FireCar


public class FireCar extends Car{

 

@Override

void cautionSound() {

System.out.println("huo...huo...huo");

}

}

 

主类Demo25


public class Demo25 {

 

public static void main(String[] args) {

Car car = new PoliceCar();

car.cautionSound();

car = new FireCar();

car.cautionSound();

}

}


java3.png 



面向抽象编程


在设计一个程序时,可以通过在abstract类中声明若干个abstract方法,表明这些方法在整个系统设计中的重要性,方法体的内容细节由它的非abstract子类去完成。

使用多态进行程序设计的核心技术之一是使用上转型对象,即将abstract类声明对象作为其子类的上转型对象,那么这个上转型对象就可以调用子类重写的方法。

所谓面向抽象编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。


新建SoundMaker类


java4.png 

 

运行结果


java5.png 


修改代码后


java6.png 


运行结果

发现SoundMaker不管传什么过来,它只管发声,如果想发不同的声音就传不同的过来,这就是上转型对象和多态的魅力,永远接收一个父类的对象,可以把不同的子类赋给我,然后去调用共有的实例方法,就能达到你想要的目的。


java7.png

0 0
原创粉丝点击