掌握继承的实现机制和语法

掌握子类对象的实例化和构造器

理解对象的上转型机制和多态的含义


文章目录


前言

类图

内容一:Geometric

1.实验内容

2.实验思路

         3.实验代码

         4.实验结果截图

内容二:宠物的自我介绍

1.实验内容

2.实验思路

3.实验代码

4.实验结果截图

内容三:自主创作

1.实验内容

2.实验思路

3.实验代码

4.实验结果截图

总结


前言

由多个功能组合而成,用于巩固继承和多态的知识

工具:idea


类图

类的多继承java 类的继承与多态java实验_idea

类的多继承java 类的继承与多态java实验_类的多继承java_02

类的多继承java 类的继承与多态java实验_ide_03

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.实验结果截图


类的多继承java 类的继承与多态java实验_java_04

 

内容二:宠物的自我介绍

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.实验结果截图

类的多继承java 类的继承与多态java实验_java_05

类的多继承java 类的继承与多态java实验_java_06

内容三:自主创作

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.实验结果截图

类的多继承java 类的继承与多态java实验_开发语言_07


总结

这就是本次实验的全部内容了,主要是为了理解和巩固继承和多态的作用,继承还是比较容易理解,但是多态我认为还需要更深入的理解才行(就个人而言)。

以上。