Java实验(2):类与继承

观察以下代码,进行实验。

该程序实现了一个父类Telephone和其子类Mobilephone,该类有电话品牌,电话号码等属性,另外还有计算话费和显示信息等方法。子类Mobilephone除了具有父类的属性外,还有网络类型,被叫时间等属性,另外它还有自己的计算话费和显示信息的方法。

class Telephone{
	String brand,number;
	double dialledTime;
	double rate;
	Telephone(String b, String n){
		brand = b;
		number = n;
	}
	String getBrand(){return brand;}
	String getNumber(){return number;}
	double getRate(){return rate;}//返回费率值
	double getDialledTime(){return dialledTime;}
	
	void setBrand(String b){
		brand = b;
	}
	void setNumber(String n){
		number = n;//设置电话号码
	}
	void setRate(double r){
		rate = r;
	}
	void setDialledTime(double d){
		dialledTime = d;
	}
	
	double callCost(){
		return dialledTime * rate;
	}
	void display(){
		System.out.println("电话品牌:"+brand+"电话号码:"+number);
		System.out.println("通话时间:"+dialledTime+"费率:"+rate);
		System.out.println("话费"+callCost());
	}
}
class Mobilephone extends Telephone{
	String network;
	double receivedTime;
	Mobilephone(String b,String num,String net){
		super(b,num);
		network = net;
	}
	
	String getNetwork(){return network;}
	double getReceivedTime(){return receivedTime;}
	
	void setNetwork(String n){
		network = n;
	}
	void setReceivedTime(double d){
		receivedTime = d;//设置被叫时间
	}
	double callCost(){
		return (dialledTime+0.5*receivedTime)*rate;
	}
	void display(){
		System.out.println("电话品牌:"+brand+"电话号码:"+number+"网络:"+network);
		System.out.println("主叫时间:"+dialledTime+"被叫时间:"+receivedTime+"费率:"+rate);
		System.out.println("花费"+callCost());
	}
}
public class Inheritance{
	public static void main(String[] args){
		Telephone tel;
		Mobilephone mobile;
		tel = new Telephone("TCL","8309600");
		mobile = new Mobilephone("Nokia","13007091010","CDMA");
		tel.setRate(0.2);
		tel.setDialledTime(150);
		mobile.setRate(0.4);
		mobile.setDialledTime(80);//设置主叫时间为80
		mobile.setReceivedTime(120);
		tel.display();
		System.out.println();
		mobile.display();//显示移动电话的信息
	}
}
		
		
1、使用DOS命令进入其所存放的目录,编译运行该程序。并将运行结果展示。

在这里插入图片描述

2、Mobilephone类的display( )方法中的 callCost( )方法调用的是谁的方法?如何调用父类的callCost( )方法?另外,将Mobilephone类的构造方法中的super(b, num)去掉,有什么结果?为什么?
  • Mobilephone类中的display()方法中的callCost()方法调用Mobilephone()类的方法。使用super关键字可以调用父类的callCost()方法,即在Mobilephone类中的display()方法中的callCost()改为super.callCost().
  • 如果去掉Mobilephone类中super(b,num)语句,程序将会报错。因为在Mobilephone类的构造方法中,指定了三个参数,在这个类中的display()方法也使用了这些参数。如果没有显式继承(即通过super语句继承),则继承父类中无参数的构造函数。在本程序中Telephone类中明显没有无参数构造函数,所以如果去掉super(b,num)这个语句,Mobilephone构造方法无法从父类Telephone中继承 b,num属性,会导致程序无法通过编译,无法正常运行。
  • 通过去掉这个语句,重新编译运行验证。无法通过编译,结果与分析大致相符。在这里插入图片描述
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值