java实验2 类的继承性

实验2 类的继承性

一、实验目的

掌握面向对象的继承性在Java中的实现方法;掌握super关键字的用法,体会抽象类和抽象方法的作用。

二、实验内容

1.程序理解:

1)类的继承

2)第4章课后编程第1题


class Student {
    public String name;
    public int age;
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void show(){
        System.out.println("name: "+name+" age: "+age);
    }
}
class UnderGraduate extends Student{
    public String degree;
    public UnderGraduate(String name,int age,String degree){
        super(name, age);
        this.degree=degree;
    }
    public void show(){
        System.out.println("name: "+name+" age: "+age+" degree: "+degree);
    }
}
public class Test01{
    public static void main(String[] args) {
        Student student = new Student("zhangsan", 16);
        student.show();
        UnderGraduate underGraduate = new UnderGraduate("lisi", 20, "bechalor");
        underGraduate.show();
    }

2.编程题:

(1)请按照以下要求设计类。( 程序1)

要求如下:

1)设计Animal类。类中定义一个成员变量animalName,表示动物的名称,变量animalName是String类型,默认初始值。在该类中再定义一个成员方法shout(),表示动物发出叫声的行为,该方法能输出名称为animalName的动物发出叫声,例如输出“波斯猫发出叫声”。

2)设计Cat类。使用关键字extends继承Animal类。Cat类中定义一个public类型的构造方法,该构造方法拥有一个String类型的参数catName,通过该参数,为Cat类中继承自Animal类的animalName成员变量赋值。

3)设计一个测试类。类名为ExtendsTest,在main方法中定义一个 String类型的name变量,并为它赋值为”波斯猫”,然后使用有参构造创建Cat类的对象,并使用对象的引用变量调用shout()方法。

(2)设计父类和一个子类,在子类里面通过super关键字去调用父类的成员变量和成员方法,在子类的构造方法中使用super关键字调用父类的构造方法,在测试类里进行验证。(程序2)

(3)创建平面图形抽象类(PlaneGraphic)及其子类三角形(Triangle), 圆(Circle),长方形(Rectangle)的一个继承分级结构。在抽象类PlaneGraphic中,提供计算图形周长和面积的抽象方法,并在各子类中实现抽象方法,从而根据不同类型的平面图形计算相应的周长和面积。提示:三角形面积计算用海伦公式:,p为三角形的半周长。(程序3)

(4)请按照以下要求设计一个Outer类。(程序4)

要求如下:

1)定义一个外部类Outer,并在该类中定义一个静态内部类Inner。

2)在内部类中定义一个静态变量staticField和一个静态方法staticMethod(),并将该变量的值设置为”静态内部类的静态变量”,该方法中输出”静态内部类的静态方法”。

3)定义一个测试类,在main()方法中输出staticField的值,并且调用静态方法staticMethod()。

(5)熟悉Eclipse开发工具。

请自己学习课本第11章,熟悉使用Eclipse进行程序调试(418页),了解jar文件的导入和导出(422页)。

三、实验结果和分析

说明:请截图给出各个程序的运行结果,并做必要的分析。

(1)程序1运行结果

分析:Cat类通过extends关键字继承了Animal类,这样Cat类便是Animal类的子类。从运行结果不难看出,子类虽然没有定义animalName属性和shout()方法,但是却能访问这两个成员,这就说明,子类在继承父类的时候,会自动拥有父类的所有成员,Cat类定义了有参构造函数,在测试类的main方法中使用有参构造创建Cat类对象,运行结果如图所示

(2)程序2运行结果

分析:定义了一个Child类继承Father类,并重写了Father类的eat()方法,在子类Child的eat()方法中使用”super.eat()”调用了父类被重写的方法,在introFather()方法中使用“super.age”访问父类的成员变量。从运行结果可以看出,子类通过super关键字成功地访问父类的成员变量和成员方法。在实例化Child对象时一定会调用Child类的构造方法,从运行结果可以看出,Child类的构造方法被调用时,父类的构造方法也被调用了。

(3)程序3运行结果

分析:从运行结果可以看出,子类实现了父类的抽象对象后,可以正常进行实例化,并通过实例化对象调用方法。抽象类其实是约束子类的方法命名,在抽象父类中定义抽象方法,在子类中实现,不同的参数通过成员变量实现。

(4)程序4运行结果

分析:内部类Inner使用static关键字来修饰,是一个静态内部类,实例化方式与非静态的成员内部类的实例化方式不一样,在静态内部类中科院定义静态的成员,而在非静态的内部类中不允许定义静态的成员。

四、实验源代码

说明:请将各程序的源代码复制粘贴到这里。

(1)程序1源代码

//定义Animal类
class Animal{
    String animalName;
    //定义动物叫的方法
    void shout(){
        System.out.println(animalName+"发出叫声");
    }
}
//定义Cat类继承Animal类
class Cat extends Animal{
    //类中定义一个public类型的构造方法
    public Cat(String catName){
        animalName=catName;
    }
}
//定义测试类
public class ExtendsTest {

    public static void main(String[] args) {
        String name="波斯猫";      //定义一个  String类型的name变量,并为它赋值为”波斯猫”,
        Cat cat=new Cat(name);  //使用有参构造创建Cat类的对象
        cat.shout();            //使用对象的引用变量调用shout()方法。
    }

}

(2)程序2源代码

//定义Father类
class Father{

    int age=30;
    String food="小熊饼干";
    //定义Father类有参构造函数
    public Father(String name){
        System.out.println("我的名字叫"+name);
    }
    //定义喜欢吃的方法
    void eat(){
        System.out.println("我喜欢吃"+food);
    }
}
//定义Child类
class Child extends Father{
    //在子类的构造方法中使用super关键字调用父类的构造方法,
    public Child(){
        super("蜡笔小新");
    }
    //在子类里面通过super关键字去调用父类的成员方法,
    void eat(){
        super.eat();
    }
    //在子类里面通过super关键字去调用父类的成员变量
    void introFather(){
        System.out.println("我爸爸今年"+age+"岁了");
    }
}

//定义测试类
public class Example2 {

    public static void main(String[] args) {
        Child child=new Child();        //创建一个Child类的实例对象
        child.eat();                    //调用Child类的eat方法
        child.introFather();            //调用Child类的introFather方法
    }

}

(3)程序3源代码

import java.util.Scanner;
//定义抽象类PlaneGraphic
abstract class PlaneGraphic{
    double area;
    //定义抽象方法getArea
    abstract void getArea();
}
//定义Triangle类继承抽象类PlaneGraphic
class Triangle extends PlaneGraphic{
    double a,b,c;
    //定义Triangle类有参构造函数
    public Triangle(double a,double b,double c){
        this.a=a;
        this.b=b;
        this.c=c;
    }
    //实现抽象方法getArea()
    void getArea(){
        double p=(a+b+c)/2;
        double area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
        System.out.println("该三角形的面积是:"+area);
    }
}
//定义Circle类继承抽象类PlaneGraphic
class Circle extends PlaneGraphic{

    double r;
    //定义Circle类有参构造函数
    public Circle(double r){
        this.r=r;

    }
    //实现抽象方法getArea()
    void getArea(){

        double area=Math.PI*r*r;
        System.out.println("该圆的面积是:"+area);
    }
}
//定义Rectangle类继承抽象类PlaneGraphic
class Rectangle extends PlaneGraphic{
    double x,y;
    //定义Rectangle类有参构造函数
    public Rectangle(double x,double y){
        this.x=x;
        this.y=y;

    }
    //实现抽象方法getArea()
    void getArea(){

        double area=x*y;
        System.out.println("该矩形的面积是:"+area);
    }
}
//定义测试类
public class Example3 {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入三角形的边长:");
        double a1=sc.nextDouble();
        double b1=sc.nextDouble();
        double c1=sc.nextDouble();
        Triangle t=new Triangle(a1,b1,c1);//实例化Triangle对象
        t.getArea();
        System.out.println("请输入圆的半径:");
        double r1=sc.nextDouble();
        Circle c=new Circle(r1);                 //实例化Circle对象
        c.getArea();
        System.out.println("请输入矩形的边长:");
        double x1=sc.nextDouble();
        double y1=sc.nextDouble();
        Rectangle re=new Rectangle(x1,y1);  //实例化Rectangle对象
        re.getArea();
    }

}

(4)程序4源代码

//定义一个外部类
class Outer{
    //下面的代码定义了一个静态内部类
    static class Inner{
        static String staticField="静态内部类的静态变量";
        static void staticMethod(){
            System.out.println("静态内部类的静态方法");
        }
    }
}
//定义测试类
public class Example4 {

    public static void main(String[] args) {
            Outer.Inner inner=new Outer.Inner();//创建内部类对象
            System.out.println(inner.staticField);
            inner.staticMethod();
    }

}
时间: 2024-10-29 16:26:43

java实验2 类的继承性的相关文章

Java实验3 类的多态性和接口

实验3 类的多态性和接口 一.实验目的 理解面向对象的多态性.理解接口和实现接口的类的关系,掌握一个类实现多个接口的声明和使用方法. 二.实验内容 1.程序理解: 接口的应用 //接口的应用 //定义一个PCI接口: interface PCI { void start(); // 定义抽象方法start() void stop(); // 定义抽象方法stop() } // 定义 NetworkCard类实现PCI接口 class NetworkCard implements PCI { //

JAVA实验4 类与对象(封装继承多态等机制的使用)

实验四 类与对象(封装.继承.多态等机制的使用) 实验内容: 1. 编写一个名为TwoDimensionalShape的抽象类,拥有属性area和circumference表示面积和周长,以及抽象方法getArea()和getCircumference(),用于获取面积和周长. 2. 编写Printable接口,包括一个抽象方法printShapeInfo,用于输出图形信息. 3. 分别编写Rectangle.Triangle.Circular三个类,用于描述矩形.三角形和圆形,要求继承于Two

JAVA实验3 类与对象

实验要求: 掌握类与对象的基本思想 能够熟练地使用Java设计并编写类 能够灵活运用各种对象 实验内容: 希腊神话中,宙斯战胜了泰坦之后成为众神之王,以此为背景,通过构造相应对象.属性和方法,并用随机的方式,模拟宙斯与泰坦的战斗过程. 构建类Titan,要求如下: 整形字段HP,以及相应的getter和setter 空参数列表构造方法Titan(),创造出的HP默认为700 带参数构造方法Titan(int HP),创造出指定HP的对象 方法attack(Zues z),参数为宙斯对象,每次调用

Java实验四和实验五

实验四 类的继承性和多态性 [开发语言及实现平台或实验环境] Windows2000 或XP,JDK1.6与Jcreator4.0 [实验目的] 1.  掌握OOP方式进行程序设计的方法, 2.  了解类的继承性和多态性的作用. [实验要求] 1.  编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序. 2.  编写体现类多态性(成员方法重载,构造方法重载)的程序. [实验内容] 一 类的继承性练习 1. 进一步理解继承的含义 新类可从现有的类中产生,并保留现有类的成员变量和方法并可根

Java实验报告(实验一)

北京电子科技学院 实     验    报     告 课程:移动平台应用开发实践    班级:201592            姓名:艾鸽   学号:20159201 成绩:                               指导教师:娄嘉鹏          实验日期:2015.9.28 实验密级:                         预习程度:                   实验时间:8:00-12:00 仪器组次:                      

java实验三 敏捷开发与XP实践

一.实验内容 (一)敏捷开发与XP 软件开发流程的目的是为了提高软件开发.运营.维护的效率,并提高软件的质量.用户满意度.可靠性和软件的可维护性. 光有各种流程的思想是不够的,我们还要有一系列的工具来保证这些思想能够在实践中有效率地运作.一个常见的公式是:软件工程=开发流程+工具.敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法.“敏捷流程”是一系列价值观和方法论的集合. 其中,极限编程(eXtreme Programming,XP)是 是一种全新而快捷的

Java实验二实验报告:java面向对象程序设计

java实验二实验报告 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问

20135331 文艺 java实验

实验楼第一次实验报告 北京电子科技学院(BESTI) 实     验    报     告 课程:Java实验    班级:1353    姓名:文艺   学号:20135331 成绩:             指导教师:娄嘉鹏    实验日期:2015.4.14 实验密级:         预习程度:              实验时间: 仪器组次:31      必修/选修:必修             实验序号:01 实验名称: Java程序开发 实验目的与要求:  1.实现命令行下Jav

第一次java实验报告

Java实验报告 20135226黄坤 一.实验内容 (一).命令行下Java程序开发 (二).Eclipse下Java程序开发.调试 (三).通过命令行和eclipse两种方式实现四则运算并进行测试 二.实验过程 Eclipse下Java程序开发.调试 在Eclipse中单击File->New-> Java Project新建Java项目,输入项目名称Hellojy,并单击Finish按钮完成新建项目,在Eclipse中单击File->New->Class新建Java类 据Jav