Java学习笔记;abstract类和面向抽象编程

abstract类
abstract类用abstract关键字修饰的类,也叫抽象类。不能用new运算符创建对象。
而对于abstract方法只能进行声明,不能去实现(没有方法体)
而且也不能用final和abstract同时修饰一个方法或类(若非抽象类是某抽象类的子类,就必须重写父类的抽象方法),也不允许static修饰abstract方法,即abstract必须是实力方法。
**abstract方法只能出现在abstract类中。**加粗样式
作用(自我理解)
看起来抽象类一大堆要求,方法由只能声明,不能实现功能,但某具体类继承该抽象类以后,必须重写该类的抽象方法,也就是说,有几个子类就可以重写出几个不同的方法,实现不同的功能,然后子类对象上转型为抽象对象,所以主类只需要关注该抽象类即可,不需要考虑继承的它的子类有什么数据,。
而所谓的面向抽象编程
是指当设计某种重要的类时,不让该程序面向具体的类,而是面向抽象类,即所涉及的重要数据是抽象类声明的对象,而不是具体类的声明对象。

在这里插入图片描述
具体代码为
DiMianJ.java
package Abstract;

public abstract class DiMianJ {
public abstract double getArea();
}

Pillar.java
package Abstract;

public class Pillar {
DiMianJ dimianji; //dimianji是抽象类DiMian声明的对象
double h;
Pillar(DiMianJ diMianJ,double h) { //只关注该抽象类对象即可
// TODO Auto-generated constructor stub
this.dimianji=diMianJ;this.h=h;
}
public double getVolume() {
return dimianji.getArea()*h;
}
}

JuXing.java
package Abstract;

public class JuXing extends DiMianJ{
double a,b;
JuXing(double a,double b) {
// TODO Auto-generated constructor stub
this.a=a;
this.b=b;
}
public double getArea() {
return a*b;
}
}

YuanXing.java
package Abstract;

public class YuanXing extends DiMianJ{
double r;
YuanXing(double r){
this.r=r;
}
public double getArea() {
return 3.14rr;
}
}

TiJi.java
package Abstract;

public class TiJi {

public static void main(String[] args) {
	// TODO Auto-generated method stub
  Pillar p;
  DiMianJ b;
  b=new YuanXing(10);
  p=new Pillar(b,58); 
  System.out.println("圆形主体体积为"+p.getVolume());
  b=new JuXing(12, 22);
  p=new Pillar(b, 58);
  System.out.println("矩形主体体积为"+p.getVolume());
}

}
结果截图
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Eysunvoes/article/details/88191874
今日推荐