1.理解类的继承,掌握变量隐藏、方法覆盖的概念。
2.理解多态概念,掌握方法的匹配调用原则。
3.理解访问控制符的使用。
1.编程实现类的继承机制。
2.编程实现方法的多态性。
实验步骤:
Person |
---|
- name:String |
+ Person(); + Person(name:String) +getName():String +void setName(name:String) |
Student |
---|
- department:String |
+ Student(); + Student(department:String) + getDepartment():String + void setDepartment(department:String) |
说明:UML(统一建模语言,是 Unified Modeling Language的缩写)类图用来抽象地描述各个类的信息及各个类之间的关系。在UML类图中,每一个矩形代表一个类。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的属性。第三层是类的方法。前面的符号,+ 表示public,- 表示private,# 表示protected。图中的箭头表示继承关系,由子类指向父类。
源代码:
Person类:
Students类
TestMain类
运行结果截图:
(1)动物(Animal) 具有行为:吃(eat)、 睡觉(sleep)。
(2)动物包括:兔子(Rabbit), 老虎(Tiger)。
(3)这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。
请通过继承实现以上需求,并编写测试类AnimalTest进行测试。
源代码:
package 第六章;
class Animal{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void eat(){
System.out.println(this.name+"在吃");
}
public void sleep(){
System.out.println(this.name+"在睡觉");
}
}
class Rabbit extends Animal{
public void eat(){
System.out.println(this.getName() + "在吃草");
}
}
class Tiger extends Animal{
public void eat(){
System.out.println(this.getName() + "在吃肉");
}
}
public class AnimalTest {
public static void main(String[] args){
Rabbit r = new Rabbit();
r.setName("小白兔");
r.eat();
r.sleep();
Tiger t = new Tiger();
t.setName("老虎");
t.eat();
t.sleep();
}
}
运行结果截图:
父类Vehicles属性:名称,颜色,座位。方法:showDetail( ),用来显示名称,颜色,座位。
子类Car增加String型属性act用来表示小汽车的独特行为(如:“不能拉货用”等),增加方法show( )用来输出小汽车的独特行为。
Car类调用父类Vehicles的方法showDetail( )显示名称、颜色、座位,调用自己的方法show( )输出独特行为。编写测试类VehiclesTest来测试。
源代码:
package 第六章;
class Vehicles{
String color;
String name;
String seat;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSeat() {
return seat;
}
public void setSeat(String seat) {
this.seat = seat;
}
public void showDetail(){
System.out.println("名称:"+this.name+"\t 颜色:"+this.color+"\t座位:"+this.seat);
}
}
class Car extends Vehicles{
String act = "不能拉货用";
public void show(){
System.out.println("独特属性:"+this.act);
}
}
public class VehiclesTest {
public static void main(String[] args){
Car c = new Car();
c.setName("小汽车");
c.setColor("白色");
c.setSeat("四座");
c.showDetail();
c.show();
}
}
运行结果截图:
(1)乐器(Instrument) 分为:钢琴(Piano)、 小提琴(Violin)。
(2)各种乐器的弹奏( play )方法各不相同。
编写一个测试类InstrumentTest,要求:
(1)编写方法testPlay, 对各种乐器进行弹奏测试。要依据乐器的不同,进行相应的弹奏。
(2)在main方法中进行测试。
提示:
(1)乐器Instrument为父类,钢琴(Piano)、 小提琴(Violin)为子类;
(2)乐器类只有play()方法,钢琴(Piano)子类和小提琴(Violin)子类有同名方法play()即重写父类乐器的play()方法。
源代码:
package 第六章;
class Instrument{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void play(){
System.out.println("弹奏方法");
}
}
class Piano extends Instrument{
public void play(){
System.out.println("弹"+this.name);
}
}
class Violin extends Instrument{
public void play(){
System.out.println("拉"+this.name);
}
}
public class TestPlay {
public static void main(String[] args){
Piano p = new Piano();
p.name = "钢琴";
p.play();
Violin v = new Violin();
v.name = "小提琴";
v.play();
}
}
运行结果截图:
提示:使用打印语句完成方法的内容。如Bird的move方法输出“我有翅膀,我能飞翔! ”
源代码:
package 第六章;
class Dongwu{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void move(){
System.out.println("移动方式");
}
public void cry(){
System.out.println("尖叫方法");
}
}
class Dog extends Dongwu{
public void move(){
System.out.println("我有双腿,我能奔跑");
}
public void cry(){
System.out.println("狗吠");
}
}
class Bird extends Dongwu{
public void move(){
System.out.println("我有翅膀,我能飞翔");
}
public void cry(){
System.out.println("歌唱");
}
}
public class main {
public static void main(String[] args){
Dog d = new Dog();
d.setName("狗");
d.move();
d.cry();
Bird b = new Bird();
b.setName("鸟");
b.move();
b.cry();
}
}
运行结果截图: