《Java技术》第三次作业--面向对象——继承、抽象类、接口

一)学习总结

1.阅读下面程序,分析是否能编译通过?如果不能,说明原因。应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来?

class Grandparent {
    public Grandparent() {
        System.out.println("GrandParent Created.");
    }
    public Grandparent(String string) {
        System.out.println("GrandParent Created.String:" + string);
    }
}
class Parent extends Grandparent {
    public Parent() {
        System.out.println("Parent Created");
        super("Hello.Grandparent.");
    }
}
class Child extends Parent {
    public Child() {
        System.out.println("Child Created");
    }
}
public class Test{
    public static void main(String args[]) {
        Child c = new Child();
    }
}

以上程序不能通过编译。因为super语句必须放在子类构造方法的首行。将改语句放在子类构造方法的首行即可。

运行结果为

先调用父类的构造方法为父类中的属性初始化,就表示先有父类实例,才有子类实例,不能反过来。

2.阅读下面程序,分析程序中存在哪些错误,说明原因,应如何改正?正确程序的运行结果是什么?

class Animal{
  void shout(){
      System.out.println("动物叫!");
  }
}
class Dog extends Animal{
      public void shout(){
          System.out.println("汪汪......!");
     }
      public void sleep() {
       System.out.println("狗狗睡觉......");
      }
}
public class Test{
    public static void main(String args[]) {
        Animal animal = new Dog();
        animal.shout();
        animal.sleep();
        Dog dog = animal;
        dog.sleep();
        Animal animal2 = new Animal();
        dog = (Dog)animal2;
        dog.shout();
    }
}

存在的错误:

1、父类向上转型申明的属性,子类只能用其调用父类中含有的方法;

2、向下转型时,必须确认子类和父类存在关系

改正后

3.运行下列程序

class Person {
   private String name ;
   private int age ;
   public Person(String name,int age){
         this.name = name ;
         this.age = age ;
   }
}
public class Test{
      public static void main(String args[]){
             Person per = new Person("张三",20) ;
             System.out.println(per);
             System.out.println(per.toString()) ;
  }
}

运行结果为

)那么,程序的运行结果到底是什么呢?利用eclipse打开println(per)方法的源码,查看该方法中又调用了哪些方法,能否解释本例的运行结果?

print方法中调用了write方法,打印了类本身。

(3)在Person类中增加如下方法

public String toString(){
        return "姓名:" + this.name + ",年龄:" + this.age ;
 } 

修改后

class Person {
   private String name ;
   private int age ;
   public Person(String name,int age){
         this.name = name ;
         this.age = age ;
   }
   public String toString(){
       return "姓名:" + this.name + ",年龄:" + this.age ;
} 

}
public class Test{
      public static void main(String args[]){
             Person per = new Person("张三",20) ;
             System.out.println(per);
             System.out.println(per.toString()) ;
  }
}

运行结果

覆写了toString方法,调用的为覆写后的方法内容,打印类名也默认调用覆写后的方法。

4.汽车租赁公司,出租汽车种类有客车、货车和皮卡三种,每辆汽车除了具有编号、名称、租金三个基本属性之外,客车有载客量,货车有载货量,皮卡则同时具有载客量和载货量。用面向对象编程思想分析上述问题,将其表示成合适的类、抽象类或接口,说明设计思路。现在要创建一个可租车列表,应当如何创建?

定义一个抽象类(或者接口)“出租汽车”,有抽象方法承载量,定义客车类、火车类、皮卡类去继承出租汽车(或者实现接口),实现父类中的抽象方法,

客车实现抽象方法,打印载客量,货车实现抽象方法,打印载货量,皮卡实现抽象方法,打印载客量和载货量,

定义租车类,声明出租汽车类数组,通过构造方法中参数以及上转型初始化。

5.阅读下面程序,分析代码是否能编译通过,如果不能,说明原因,并进行改正。如果能,列出运行结果

interface Animal{
        void breathe();
        void run();
        void eat();
    }
    class Dog implements Animal{
        public void breathe(){
            System.out.println("I‘m breathing");
        }
        void eat(){
            System.out.println("I‘m eating");
        }
    }
    public class Test{
        public static void main(String[] args){
            Dog dog = new Dog();
            dog.breathe();
            dog.eat();
        }
    }

不能:接口中方法,默认是public abstract 所以在子类实现抽象方法时,应该用public修饰

并且需要实现接口中所有的抽象方法,这里需要再实习接口中的run方法。

(二)实验总结

1、宠物商店中,总是不能将需要输入的东西传到数组中,不能很好的写出相关代码;

2、申明数组后,必须对数组内每个成员进行实例化,否则会出现空指针现象

3、继承必须对父类所有方法进行重写。

4、上转型

对象转型

上转型对象

上转型对象:使父类对象引用指向一个子类实例

上转型格式:父类名 父类对象=new 子类名(子类实例);

上转型的叫法:父类对象xxx是子类对象的上转型对象

上转型对象的特点:

上专性对象不能对子类新添加的变量或方法进行操作

上转型对象调用的方法只能是子类重写过的方法以及继承且没有修改的方法

上转型对象可以调用子类继承或隐藏的变量

(三)代码托管(务必链接到你的项目)

https://gitee.com/hebau_java_cs16/Java_CS01ZY/tree/master

码云提交历史截图

原文地址:https://www.cnblogs.com/zy14122/p/8858723.html

时间: 2024-10-07 03:54:17

《Java技术》第三次作业--面向对象——继承、抽象类、接口的相关文章

《Java技术》第二次作业--面向对象基础

(一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? public class Test { public static void main(String args[]) { Foo obj = new Foo(); } } class Foo{ int value; public Foo(int intValue){ value = intValue; } } 构造方法:没有返回值,名字与类名相同,当创建对象时会调用构造方法(如果没有写构造方法,那么编

12.面向对象(继承/super/接口/抽象类)

面向对象继承与派生继承继承顺序继承原理子类调用父类的方法(super)组合接口接口的概念:接口的概念解释和使用:python中的接口:抽象类 面向对象 继承与派生 继承 什么是继承?继承是一种创建新的类的方式 class A: pass class B(A): pass 在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或者超类,新建的类称为派生类或者子类 python中类的继承分为,单继承和多继承. 查看继承的方法B.__bases__ 如果没有指定基类,python的类会默

第三章:继承/抽象类/接口

继承 在面向对象编程中,有两种截然不同的继承类型,实现继承和接口继承;C#中不支持多重继承,C#类可以派生自另一个类和任意多的接口 实现继承:表示一个类型派生自一个基类型,它拥有该基类型的所有成员字段和函数,在需要给现有类型添加功能或者许多相关类型共享一组重要的公共功能时.这种类型继承非常有用 接口继承:表示一个类型只继承了函数的签名,没有继承任何的实现代码 实现继承virtual/override /// <summary> /// 基类 /// </summary> class

12-14java面向对象之抽象类&amp;接口

抽象类 1.抽象类概念 抽象类:包含抽象方法的类,相比于普通类,他多了一个抽象方法. 抽象方法:只声明但是没有实现的方法,用abstract关键字来定义. 未实现的举例: class A { private String name ; public void print() } 在类中声明的方法,有{}则说明有方法体,则实现:没有{},则未实现. 2.使用规则 包含一个抽象方法的类必须是抽象类 抽象类和抽象方法都使用abstract关键字声明 抽象方法只需要声明不需要实现 抽象类必须被子类继承,

《JAVA 技术》第二次作业

一.学习要点 认真看书并查阅相关资料,掌握以下内容: 理解对象的创建与引用的关系 掌握构造方法的重载 掌握String类 掌握类的设计方法 掌握this关键字 掌握static关键字 理解引用传递并掌握基本应用 掌握单例模式 理解内部类 二.作业要求 发布一篇随笔,主要包括以下几部分的内容: (一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? public class Test { public static void main(String args

《Java技术》第二次作业

(一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? public class Test { public static void main(String args[]) { Foo obj = new Foo(); } } class Foo{ int value; public Foo(int intValue){ value = intValue; } } 构造方法是一个与类名相同且没有返回值类型的方法,对象的创建都是通过构造方法完成的,主要功能是

java程序设计作业 c.njupt.edu.cn java实现第三次作业

王利国的"Java语言程序设计第3次作业(2018)"详细 作业结果详细 总分:100 选择题得分:60 1. 设有如下定义语句: String s1="My cat"; int m=s1.compareTo("My a cat"); 语句被执行后m的值为( ) A.2 B.1 C.0 D.-2 正确答案是: A 2. 语句 String s1=new String("Hello"); String s2=new String

【大数据-第二期】java基础第三天作业

定义一个函数,函数功能是动态提取int[]中元素的最大值.     public static void main(String[] args){                  System.out.println(getMax(new int[0]));         int[] arr = new int[]{3,2,11,5};         System.out.println("Arr最大值为:" + getMax(arr));     }     public st

JavaWeb技术(三):JDBC中核心接口

一.  DriverManager 接口 DriverManager 数据库连接驱动接口,用于获取数据库连接对象Connection 1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.SQLException; 4 5 public class DriverManagerDemo { 6 7 public static void main(String[] args) { 8 // 数