JAVA 子类与继承例题3

本文通过具体实例展示了面向抽象编程的概念及应用,包括使用抽象类实现不同几何形状的面积计算,并进一步扩展到模拟电话卡信息展示的功能。通过继承与多态实现了代码的复用与扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向抽象编程

public abstract class Geometry  {
   public abstract double getArea(); 
}
public class Pillar{
 Geometry bottom; //bottom是抽象类Geometry声明变量
 double height;
 public Pillar(Geometry bottom,double height) {
	this.bottom=bottom;
	this.height=height;
}
 public double getVolume() {
	 if(bottom==null){
		 System.out.println("没有底,无法计算体积");
		 return -1;
	 }
	return bottom.getArea()*height;  //bottom可以调用子类重写的getArea方法
}
}

public class Circle extends Geometry{
   double r;
    Circle(double r) {
		this.r=r;
	}
	public double getArea() {
		return (3.14*r*r);
	}
}

public class Rectangle extends Geometry {
    double a,b;
    public Rectangle(double a,double b) {
	 this.a=a;
	 this.b=b;
    }
    public double getArea(){
    	return a*b;
    }
}

public class Application {

	public static void main(String[] args) {
        Pillar pillar;
        Geometry bottom=null;
        pillar=new Pillar(bottom,10);  //null底的柱体
        System.out.println("体积"+pillar.getVolume());
        bottom=new Rectangle(12,22);
        pillar =new Pillar(bottom, 58);  //pillar三具有矩形底的柱体
        System.out.println("体积"+pillar.getVolume());
        bottom =new Circle(10);
        pillar=new Pillar(bottom, 58);  //pillar是具有圆形底的柱体
        System.out.println("体积"+pillar.getVolume());
	}

}

public abstract class SIM {
    public abstract void setNumber(String n);
    public abstract String giveNumber();
    public abstract String giveCorpName();
}

public class MobileTelephone {
     SIM card;
     public void useSIM(SIM card) {
		this.card=card;
	}
     public void showMess() {
		System.out.println("使用的卡是:"+card.giveCorpName()+"提供的");
		System.out.println("手机号码是:"+card.giveNumber());
	}
}

public class SIMOfChinaMobile extends SIM {
     String number;
     public void setNumber(String n) {
		number=n;
	}
     public String giveNumber() {
		return number;
	}
     public String giveCorpName() {
		return "中国移动";
	}
}

public class SIMOfChinaUnicom extends SIM {
	 String number;
     public void setNumber(String n) {
		number=n;
	}
     public String giveNumber() {
		return number;
	}
     public String giveCorpName() {
		return "中国联通";
	}
}

public class Application {

	public static void main(String[] args) {
		MobileTelephone telephone=new MobileTelephone();
		SIM sim=new SIMOfChinaMobile();
		sim.setNumber("13887656432");
		telephone.useSIM(sim);
		telephone.showMess();
		sim.setNumber("13097656437");
		telephone.useSIM(sim);
		telephone.showMess();

	}

}

class A{
	double f(double x,double y){
		return x+y;
	}
}
class B extends A{
	double f(int x,int y){
		return x*y;
	}
}
public class exam {
	public static void main(String[] args) {
	B b=new B();
	System.out.println(b.f(3, 5));
	System.out.println(b.f(3.0, 5.0));
	}
}

class A{
	public int getNumber(int a) {
		return a+1;
	}
}
class B extends A{
	public int getNumber(int a) {
		return a+100;
	}
}
public class exam1 {

	public static void main(String[] args) {
		A a=new A();
		System.out.println(a.getNumber(10));
        a=new B();
        System.out.println(a.getNumber(10));
	}
}

class A{
	 double f(double x,double y) {
		return x+y;
	}
	static int g(int n){
		return n*n;
	}
}
class B extends A{
	double f(double x,double y){
		double m=super.f(x, y);
		return m+x*y;
	}
	static int g(int n){
		int m=A.g(n);
		return m+n;
	}
}
public class exam1 {

	public static void main(String[] args) {
		B b=new B();
		System.out.println(b.f(10.0, 8.0));
		System.out.println(b.g(3));
		A a=new B();
		System.out.println(a.f(10, 8.0));
		System.out.println(a.g(3));
	}
}

class A{
	int m;
	int getM(){
		return m;
	}
	int seeM(){
		return m;
	}
}
class B extends A{
	int m;
	int getM(){
		return m+100;
	}
}
public class haha {

	public static void main(String[] args) {
		B b=new B();
		b.m=20;
		System.out.println(b.getM());
		A a=b;
		a.m=-100;
		System.out.println(a.getM());
		System.out.println(b.seeM());

	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值