实验三 类的继承

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){//构造函数传nameID的参数

     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){//构造函数传nameID的参数

     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+"在爬树");

   }

}

你可能感兴趣的:(实验三 类的继承)