实验三 类的继承

  • Post author:
  • Post category:其他


1(Person.java):定义Person类,变量name,ID。 用户不能直接修改这些变量,可以通过getName,setName方法获取Name 属性和设置Name属性,ID也是如上。

2(American.java, Chinese

.java):定义Person类的eat()方法。定义American类和Chinese类,分别继承Person 类,并重写Person 类的eat方法。American的eat方法输出“我用刀叉吃西餐”;Chinese 的eat方法输出”我用筷子吃中餐”。并用测试类调用测试。

3(Auto.java, Bus.java):设计一个汽车类Auto,有速度属性speed,启动start、加速speedup和停止stop方法,从Auto类派生一个子类Bus,以表示公共汽车,且Bus增加一个表示乘客数的属性passenger,另外添连个表示乘客上车和下车的方法getOn和getOff。

4:

一、P88的实验2:

编写一个Java应用程序,模拟学校和教师的关系,即学校将教师作为自己的一个成员变量。具体要求如下。

(1)有三个源文件: School.java、Teacher.java 和MainClassjava, 其中Teacherjava中的Teacher类负责创建“教师”对象。Schooljava中的School 类负责创建“学校”对象,School有类型是Teacher、名字是mathTeacher和music Teacher的成员变量.School用类中的void setTeacher(Teacher t1,Teachert2)方法将参数tl和t2的值赋值给mathTeacher和musicTeacher。MainClass.java 中含有主类。

(2)在主类MainClass的main方法中首先使用Teacher类创建2个对象: zhang 和wang,然后使用School类创建一个”实验中学”对象, “实验中学”对象调用setTeacher(Teacher t1l,Teacher t2)方法将zhang和wang的引用传递给”实验中学”对象的mathTeacher和musicTeacher。

二、p89实验三:

编写程序模拟两个村庄共同拥有一片森林。编写一个Village类,该类有一个静态的int型成员变量treeAmount用于模拟森林中树木的数量。在主类MainClass的main方法中创建两个村庄,一个村庄改变了treeAmount的值,另一个村庄查看treeAmount的值。

三、118实验1:

编写程序模拟猫和狗。程序中有4个类: Animal、Dog. Cat和主类MainClass类。要求如下。

(1 ) Animal类有权限是protected的String型成员变量name,以及public void cryO、public voidshowName(方法。

(2) Dog类是Animal的子类,新增public void swimming0方法,重写父类的public void cry()方法。

(3) Cat类是Animal的子类,新增public void climbUpTree(方法,重写父类的public void cry()方法。

(4)在主类MainClass中使用Dog和Cat类创建对象。

  1. 源程序代码(两个类Demo类是展示Person的测试类)

Person.java:


public


class


Person {


private


String


Name


;


//


私有名字


private


String


ID


;


//


私有


ID


Person(){



//


把默认的构造函数写出来,有时候可能会用到


}


Person(String


Name


,String


ID


){



//


构造函数传


name





ID


的参数


this


.


Name


=


Name


;


this


.


ID


=


ID


;


}


public


String getName() {



//


获取对象的名字的方法


return


Name


;


}


void


setName(String


Name


) {



//


设置对象的名字的方法


this


.


Name


=


Name


;


}


public


String getID() {



//


获取对象的


ID


的方法


return


ID


;


}


void


setID(String


ID


) {



//


设置对象的


ID


的方法


this


.


ID


=


ID


;


}


}

Demo.java:


public


class


Demo {


public


static


void


main() {


Person


person


=


new


Person(





黄湘平





,


“3171911134”


);


//


声明对象,并调用传参的构造函数进行初始化


System.




out




.println(


person


.getName());


//


输出刚才初始化的内容


System.




out




.println(


person


.getID());


person


.setName(





雷冲





);


//


调用对象的设置名字


person


.setID(


“3171911138”


);


//


调用对象的设置


ID


System.




out




.println(


person


.getName());


//


通过输出查看刚才修改的结果


System.




out




.println(


person


.getID());


}


}


运行结果:

  1. 源程序代码(四个类,Person.java、Chinese.java、American.java、Demo.java(结果测试类)):

Person.java:


public


class


Person {


public


void


eat() {


System.




out




.println(





我用手吃饭





);


}


}

American.java:


public


class


American


extends


Person{


public


void


eat() {


System.




out




.println(





我用刀叉吃西餐





);


}


}

Chinese.java:


public


class


Chinese


extends


Person{


public


void


eat() {


System.




out




.println(





我用筷子吃中餐





);


}


}

Demo.java:


public


class


Demo {


public


static


void


main(String[]


args


) {


Person


people


=


new


American();


//


上转型的美国人对象


people


.eat();


//


调用美国人的吃的方法


people


=


new


Chinese();


//


上转型的中国人对象


people


.eat();


//


调用中国人的吃的方法


}


}

运行结果:

3.源程序代码(三个类,Auto.java,Bus.java,Demo.java(结果测试类)):

Auto.java:


public


class


Auto {


public


double


speed


;


//


加速度


public


void


start() {



//


启动的方法


System.




out




.println(





启动





);


}


public


void


upspeed() {



//


加速的方法


System.




out




.println(





加速





);


}


public


void


stop() {



//


停止的方法


System.




out




.println(





停止





);


}


}

Bus.java:


public


class


Bus


extends


Auto{


public


int


passenger


;


//


子类新增的变量


Bus(){



//


把默认的构造函数写出来,因为下面有传参的构造函数,有时候可能需要默认的构造函数


}


Bus(


int


num


){



//


传参的构造函数,对子类新增的变量进行初始化


this


.


passenger


=


num


;


}


public


void


getOn() {



//


乘客乘车的方法


System.




out




.println(





乘客上车





);


}


public


void


getOff() {



//


乘客下车的方法


System.




out




.println(





乘客下车





);


}


}

Demo.java:


public


class


Demo {


public


static


void


main(String[]


args


) {


Auto


son


=


new


Bus(50);


//bus


的上转型声明并初始化


son


.start();


//


启动


son


.upspeed();


//


加速


son


.stop();


//


停止


Bus


bus


=


new


Bus(25);


//


子类


bus


声明对象,并初始化


bus


.getOn();


//


测试


bus


新增的方法


bus


.getOff();


}


}

运行结果:

4.1.源程序代码(三个类,School.java,Teacher.java,MainClass.java(结果测试类)):

School.java:


public


class


School {


Teacher


mathTeacher


;


//


老师类的类型变量,数学老师


Teacher


musicTeacher


;


//


音乐老师


public


void


setTeacher(Teacher


t1


,Teacher


t2


) {



//


给学校类设置老师的方法


this


.


mathTeacher


=


t1


;


this


.


musicTeacher


=


t2


;


}


public


void


getTeacher() {



//


获取该老师们的名字的方法


System.




out




.println(





数学老师


:”


+


this


.


mathTeacher


.


name


);


System.




out




.println(





音乐老师


:”


+


this


.


musicTeacher


.


name


);


}


}

Teacher.java:


public


class


Teacher {


public


String


name


;


//


老师类的名字变量


Teacher(String


name


){



//


构造函数,进行初始化老师类的名字


this


.


name


=


name


;


}


}

MainClass.java:


public


class


MainClass {


public


static


void


main(String


args


[]) {


Teacher


zhang


=


new


Teacher(


“zhangsan”


);


//


声明一个对象老师叫



zhang


Teacher


wang


=


new


Teacher(


“wangwu”


);


//


声明一个对象老师叫



wang


School


实验中学


=


new


School();


//


声明一个对象学校


实验中学


.setTeacher(


zhang


,


wang


);


//


把两个老师传进这个学校


实验中学


.getTeacher();


//


查询这个学校的老师


}


}

运行结果:

4.2 源程序代码

(两个类:Village.java,MainClass.java(结果测试类)):

Village.java:


public


class


Village {


public


static


int



treeAmount



;


//


森林的数量的变量是静态的,共同拥有的变量


public


int


peoplenum


;


//


村庄的人口数量的变量


public


String


name


;


//


村庄的名字


Village(String


name


,


int


peoplenum


){



//


构造函数的传参,并且进行初始化对象的变量


this


.


name


=


name


;


this


.


peoplenum


=


peoplenum


;


}


public


void


treePlant(


int


num


) {



//


村庄种植树的数量的方法



treeAmount



+=


num


;


//


种植说明森林的树的数量增加了


System.




out




.println(


name


+





种植





+


num


+





棵树





);


//


输出种了多少


}


public


void


treeFell(


int


num


) {



//


村庄砍伐的树的数量的方法


if


(



treeAmount






num


>=0) {



//


如果数量够砍就直接输出要砍的数量


System.




out




.println(


name


+





砍伐





+


num


+





棵树





);



treeAmount



-=


num


;


//


减掉相应的数量


}


else


{



//


如果不够砍就把剩下的全砍了,并把森林数量变为


0


System.




out




.println(


name


+





还能砍伐





+



treeAmount



+





棵树





);



treeAmount



= 0;


//


森林的树的数量为


0




}


}


public


void


addPeople(


int


num


) {



//


给村庄添加人口的方法


this


.


peoplenum


+=


num


;


//


累加


System.




out




.println(


name


+





添加了





+


num


+











);


//


输出添加了多少人


}


public


void


setTreeAmount(


int


num


) {



//


初始化森林的数量,因为该变量是静态的,要通过方法进行初始化



treeAmount



=


num


;


}


public


int


treeSee() {



//


查看森林的树的数量,因为是这个变量是静态的,所以要用方法去查看


return



treeAmount



;


}


}

MainClass.java:


public


class


MainClass {


public


static


void


main(String[]


args


) {


Village


zhaozhuang


=


new


Village(





赵庄





,200);


//


初始化两个村庄的名字和人口数量


Village


majiazhuang


=


new


Village(





马家庄





,500);


System.




out




.println(


zhaozhuang


.


name


+





人口数量


:”


+


zhaozhuang


.


peoplenum


);


//


输出初始化的两个村庄的结果


System.




out




.println(


majiazhuang


.


name


+





人口数量


:”


+


majiazhuang


.


peoplenum


);


zhaozhuang


.setTreeAmount(1000);


//


初始化两个村庄拥有的森林的树的数量


System.




out




.println(





两庄的森林的树的数量


:”


+


majiazhuang


.treeSee());


//


通过输出查看初始化的结果


zhaozhuang


.treePlant(100);


//


赵庄种了


100


棵树


majiazhuang


.treePlant(200);


//


马家庄种了


200


棵树


zhaozhuang


.treeFell(250);


//


赵庄砍了


250


棵树


majiazhuang


.treeFell(100);


//


马家庄砍了


100


棵树


System.




out




.println(





两庄的森林的树的数量


:”


+


majiazhuang


.treeSee());


//


多次砍树和种树,再次查看森林的树的数量,验证结果


zhaozhuang


.addPeople(500);


//


赵庄添加了


500




majiazhuang


.addPeople(123);


//


马家庄添加了


123




System.




out




.println(


zhaozhuang


.


name


+





人口数量


:”


+


zhaozhuang


.


peoplenum


);


//


查看添加人口数量之后的两个村庄的人口数量


System.




out




.println(


majiazhuang


.


name


+





人口数量


:”


+


majiazhuang


.


peoplenum


);


}


}


运行结果:

4.3 源程序代码(四个类,Animal.java,Cat.java,Dog.java,MainClass.java(结果测试类)):

Animal.java:


public


class


Animal {


protected


String


name


;


Animal(String


name


){



//


构造函数的传参,并初始化动物的名字


this


.


name


=


name


;


}


public


void


cry() {



//


动物叫声的方法


System.




out




.println(





咆哮。。咆哮。。咆哮。。





);


}


public


void


showName() {



//


输出动物的名字的方法


System.




out




.println(


this


.


name


);


}


}

Cat.java:


public


class


Cat


extends


Animal{


Cat(String


name


){



//


子类的猫的构造函数,通过父类的构造函数进行使用就可以了


super


(


name


);


}


public


void


cry() {



//


父类的叫声的重写的方法


System.




out




.println(





喵。。喵。。喵。。





);


}


public


void


climbUpTree() {



//


子类新增的爬树方法


System.




out




.println(


name


+





在爬树





);


}


}

Dog.java:


public


class


Dog


extends


Animal{


Dog(String


name


){



//


子类的猫的构造函数,通过父类的构造函数进行使用就可以了


super


(


name


);


}


public


void


cry() {



//


父类的叫声的重写的方法


System.




out




.println(





汪。。汪。。汪。。





);


}


public


void


swimming() {





子类新增的游泳方法


System.




out




.println(


name


+





在游泳





);


}


}

MainClass.java:


public


class


MainClass {


public


static


void


main(String[]


args


) {


Dog


dog


=


new


Dog(





小黄狗





);


//


声明一个狗类型的对象,并初始化名字


Cat


cat


=


new


Cat(





小花猫





);


//


声明一个猫类型的对象,并初始化名字


dog


.showName();


//


调用狗的展示名字的方法


dog


.cry();


//


调用狗的叫声的方法


dog


.swimming();


//


调用狗的游泳方法


cat


.showName();




调用猫的展示名字的方法


cat


.cry();


//


调用猫的叫声的方法


cat


.climbUpTree();


//


调用猫的爬树方法


}


}

运行结果:

第一题:


Person(String


Name


,String


ID


){



//


构造函数传


name





ID


的参数


this


.


Name


=


Name


;


this


.


ID


=


ID


;


}


public


String getName() {



//


获取对象的名字的方法


return


Name


;


}


void


setName(String


Name


) {



//


设置对象的名字的方法


this


.


Name


=


Name


;


}


public


String getID() {



//


获取对象的


ID


的方法


return


ID


;


}


void


setID(String


ID


) {



//


设置对象的


ID


的方法


this


.


ID


=


ID


;


}


第二题:


public


class


Person {


public


void


eat() {


System.




out




.println(





我用手吃饭





);


}


}


public


class


American


extends


Person{


public


void


eat() {


System.




out




.println(





我用刀叉吃西餐





);


}


}


public


class


Chinese


extends


Person{


public


void


eat() {


System.




out




.println(





我用筷子吃中餐





);


}


}

第三题:


public


void


start() {



//


启动的方法


System.




out




.println(





启动





);


}


public


void


upspeed() {



//


加速的方法


System.




out




.println(





加速





);


}


public


void


stop() {



//


停止的方法


System.




out




.println(





停止





);


}


Bus(


int


num


){



//


传参的构造函数,对子类新增的变量进行初始化


this


.


passenger


=


num


;


}


public


void


getOn() {



//


乘客乘车的方法


System.




out




.println(





乘客上车





);


}


public


void


getOff() {



//


乘客下车的方法


System.




out




.println(





乘客下车





);


}


第四题的(


1





:


public


void


setTeacher(Teacher


t1


,Teacher


t2


) {



//


给学校类设置老师的方法


this


.


mathTeacher


=


t1


;


this


.


musicTeacher


=


t2


;


}


public


void


getTeacher() {



//


获取该老师们的名字的方法


System.




out




.println(





数学老师


:”


+


this


.


mathTeacher


.


name


);


System.




out




.println(





音乐老师


:”


+


this


.


musicTeacher


.


name


);


}


第四题的(


2


):


Village(String


name


,


int


peoplenum


){



//


构造函数的传参,并且进行初始化对象的变量


this


.


name


=


name


;


this


.


peoplenum


=


peoplenum


;


}


public


void


treePlant(


int


num


) {



//


村庄种植树的数量的方法



treeAmount



+=


num


;


//


种植说明森林的树的数量增加了


System.




out




.println(


name


+





种植





+


num


+





棵树





);


//


输出种了多少


}


public


void


treeFell(


int


num


) {



//


村庄砍伐的树的数量的方法


if


(



treeAmount






num


>=0) {



//


如果数量够砍就直接输出要砍的数量


System.




out




.println(


name


+





砍伐





+


num


+





棵树





);



treeAmount



-=


num


;


//


减掉相应的数量


}


else


{



//


如果不够砍就把剩下的全砍了,并把森林数量变为


0


System.




out




.println(


name


+





还能砍伐





+



treeAmount



+





棵树





);



treeAmount



= 0;


//


森林的树的数量为


0




}


}


public


void


addPeople(


int


num


) {



//


给村庄添加人口的方法


this


.


peoplenum


+=


num


;


//


累加


System.




out




.println(


name


+





添加了





+


num


+











);


//


输出添加了多少人


}


public


void


setTreeAmount(


int


num


) {



//


初始化森林的数量,因为该变量是静态的,要通过方法进行初始化



treeAmount



=


num


;


}


public


int


treeSee() {



//


查看森林的树的数量,因为是这个变量是静态的,所以要用方法去查看


return



treeAmount



;


}


第四题的(


3


):


public


class


Dog


extends


Animal{


Dog(String


name


){



//


子类的猫的构造函数,通过父类的构造函数进行使用就可以了


super


(


name


);


}


public


void


cry() {



//


父类的叫声的重写的方法


System.




out




.println(





汪。。汪。。汪。。





);


}


public


void


swimming() {





子类新增的游泳方法


System.




out




.println(


name


+





在游泳





);


}


}


public


class


Cat


extends


Animal{


Cat(String


name


){



//


子类的猫的构造函数,通过父类的构造函数进行使用就可以了


super


(


name


);


}


public


void


cry() {



//


父类的叫声的重写的方法


System.




out




.println(





喵。。喵。。喵。。





);


}


public


void


climbUpTree() {



//


子类新增的爬树方法


System.




out




.println(


name


+





在爬树





);


}


}



版权声明:本文为qq_41006871原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。