掌握继承的实现机制和语法
掌握子类对象的实例化和构造器
理解对象的上转型机制和多态的含义
文章目录
前言
类图
内容一:Geometric
1.实验内容
2.实验思路
3.实验代码
4.实验结果截图
内容二:宠物的自我介绍
1.实验内容
2.实验思路
3.实验代码
4.实验结果截图
内容三:自主创作
1.实验内容
2.实验思路
3.实验代码
4.实验结果截图
总结
前言
由多个功能组合而成,用于巩固继承和多态的知识
工具:idea
类图
ps:这里的类图其实是不对的,子类要用倒三角和父类连在一起写一个类图,但是画的时候我忘记了,而且word里面我一时间没想出来怎么画出这种效果,所以就暂时将错就错这样了。。
内容一:Geometric
1.实验内容
(1)定义一个几何图形类Geometric,该类中包含私有化成员属性:图形颜色color、图形是否填充filled、图形的创建时间date(直接使用Date类获取系统时间),并且重写toString方法,输出形状、是否填充及创建时间
(2)定义一个子类圆类Circle,该类中包含私有化成员属性:radius,包含获取圆面积的方法getArea(),获取圆周长的方法getPerimeter(),获取圆直径的方法getDiameter(),重写toString()方法
(3)定义一个子类长方形类Rectangle,该类中包含私有化成员属性:长方形的长length,宽width,包含获取长方形面积的方法getArea(),获取长方形周长的方法getPerimeter(),重写toString()方法
(4)给出测试类
2.实验思路
在geometric类中创建实验内容中所提到的变量,即color,filled,date等变量,并用set/get方法构造方法,建立toString返回geometric类中的变量,在图形类(以圆为例)circle类中(circle是geometric的子类),继承父类方法并调用变量计算圆的面积,周长,直径,并重写toString输出形状填充等内容,最后在测试类testgeometric中调用并输出结果。
长方形同理。
3.实验代码
代码如下:
//geometric类
import java.util.Date;
public class geometric {
private String color;
private boolean filled;
private Date date;
public geometric(){};
public geometric(String color,boolean filled){
this.color=color;
this.filled=filled;
date = new Date();
}
public String getColor(){
return color;
}
public void setColor(String color){
this.color= color;
}
public boolean isFilled(){
return filled;
}
public void setFilled(boolean filled){
this.filled = filled;
}
public Date getDate(){
return date;
}
public void setDate(Date date){
this.date = date;
}
public String toString(){
return "geometric[color"+color+",filled:"+filled+",date:"+date+"]";
}
}
//circle类
public class circle extends geometric {
private double radius;
public circle() {
super();
};
public circle(double radius) {
this.radius = radius;
};
public circle(double radius, String color, boolean filled) {
super(color, filled);
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
};
public double getArea() {
return radius * radius * Math.PI;
}
public double getPerimetric() {
return radius * 2 * Math.PI;
}
public double getDiameter() {
return radius * 2;
}
//方法的重写
@Override
public String toString() {
return "圆【半径:" + radius + ",颜色:" + getColor() + ",填充:" + super.isFilled() + ",创建时间:" + getDate() + "]";
}
}
//rectangle类
public class rectangle extends geometric{
private double length;
private double width;
public rectangle(){
super();
}
public rectangle(double length,double width){
this.length = length;
this.width = width;
}
public rectangle(double length,double width,String color,boolean filled){
super(color,filled);
this.width = width;
this.length = length;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getArea(){
return length*width;
}
public double getPerimetric(){
return (length+width)*2;
}
public String toString(){
return "长方形[长:"+length+"宽:"+width+"面积:"+"颜色:"+getColor()+"填充:"+isFilled()+"创建时间:"+getDate()+"]";
}
}
//测试类
public class testgeometric {
public static void main(String[] args){
circle circle = new circle(3,"blue",false);
System.out.println(circle);
System.out.println("---------");
System.out.println(circle.toString());
System.out.println(circle.getArea());
System.out.println(circle.getPerimetric());
System.out.println(circle.getDiameter());
}
}
4.实验结果截图
内容二:宠物的自我介绍
1.实验内容
利用继承和多态的知识完成宠物商店宠物的“自我介绍”程序。
要求:可以输出许多宠物的信息。输出格式为:我是一只狗。我叫乐乐,是一只黑色的牧羊犬。我会汪汪汪…。
2.实验思路
建立Pet类,定义name,color,breed等变量,建立cry函数给子函数调用,toString输出介绍内容,建立两只宠物(以马和猫为例)子类,在这两个宠物子类中继承父类的变量(即自我介绍的内容),重写toString方法返回介绍内容,在测试类中输入介绍内容,并调用函数使用并输出。
3.实验代码
代码如下:
//Pet类
public class Pet {
protected String name;
protected String color;
protected String breed;
public void Pet(){}
public Pet(String name,String color,String breed){
this.name = name;
this.color = color;
this.breed = breed;
}
public void cry(){}
public String toString(){
return "我叫" +name+ ",我是一只" + color + "的" + breed;
}
}
//宠物子类
public class horse extends Pet {
public horse(String name, String color, String breed) {
super(name, color, breed);
}
@Override
public void cry(){
System.out.println("鉴定为真");
}
@Override
public String toString(){
return "我是理塘顶针"+super.toString();
}
}
public class cat extends Pet {
//public cat(){
// super();
//}
public cat(String name,String color,String breed){
super(name,color,breed);
}
@Override
public void cry(){
System.out.println("呃呃...");
}
@Override
public String toString(){
return "我是无语猫猫,"+super.toString();
}
}
//测试类
public class testPet {
public static void main(String[] args){
cat c = new cat("overloadcat","卡其色","二刺螈猫");
System.out.println(c.toString());
c.cry();
horse d = new horse("珍珠","白色","小马");
System.out.println(d.toString());
d.cry();
}
}
public class testPet2 {
public static void main(String[] args){
//多态,左父右子
Pet p = new cat("呃呃了","卡其色","我不到猫");
System.out.println(p.toString());
p.cry();
p=new horse("珍珠","白色","顶针");
System.out.println(p.toString());
p.cry();
}
}
4.实验结果截图
内容三:自主创作
1.实验内容
根据你理解的多态的含义,自己写一个有关多态的案例,并测试运行。
2.实验思路
定义一个抽象类person,用来被基类的变量和方法调用,定义变量身份证号id和姓名name,toString输出身份证和姓名,判断是否为同一个对象,在测试类中使用并输出。
3.实验代码
public class person {
private String name;
private String id;
public person() {
super();
}
public person(String id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "姓名:" + name + ";身份证号:" + id;
}
@Override
public boolean equals(Object o) {
if(o instanceof person) {
person p = (person)o;
if(p.id == this.id) {
return true;//对象身份证号相等则判断为同一个对象
}else {
return false;
}
}else {
return false;//类型不同,直接返回不同
}
}
}
public class testperson {
public static void main(String[] args) {
// TODO Auto-generated method stub
person p1 = new person("140108200005270821","神鑫");
person p2 = new person("140108200003570821","神通");
System.out.println(p1);
System.out.println(p2);
System.out.println(p1 == p2);
System.out.println(p1.equals(p2));
}
}
(不管对象是什么都可以调用这个函数)
4.实验结果截图
总结
这就是本次实验的全部内容了,主要是为了理解和巩固继承和多态的作用,继承还是比较容易理解,但是多态我认为还需要更深入的理解才行(就个人而言)。
以上。