课堂(继承与多态)动手动脑

01.怎样判断对象是否可以转换?

答:可以使用instanceof运算符判断一个对象是否可以转换为指定的类型

02. 现在有三个类:

class Mammal{}

class Dog extends Mammal {}

class Cat extends Mammal{}

针对每个类定义三个变量并进行初始化

Mammal m=null ;

Dog d=new Dog();

Cat c=new Cat();

下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?

m=d;

d=m;

d=(Dog)m;

d=c;

c=(Cat)m;

出现编译错误:第二行,原因:不能将父类变量赋值给子类变量。

第四行,原因:继承于同一个父类的两个平行子类不能互相赋值。

出现运行错误:第五行,原因:在第一行中,m变量已经指向Dog对象,如果再执行c = (Cat)m,就是让c指向Dog对象,而Cat和Dog之间不存在继承关系,无法让c指向Dog对象。

03.

运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!

通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

04.

运行以下测试代码

.   左边的程序运行结果是什么?

2.   你如何解释会得到这样的输出?

3.   计算机是不会出错的,之所以得

到这样的运行结果也是有原因的,

那么从这些运行结果中,你能总

结出Java的哪些语法特性?

答:

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

如果子类被当作父类使用,则通过子类访问的字段是父类的!

时间: 2024-10-17 03:29:57

课堂(继承与多态)动手动脑的相关文章

继承与多态 动手动脑

[1] 为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 提示: 构造函数的主要作用是什么? 从这个方面去想! [答] 构造函数(constructor)是一种特殊的方法.主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载.构造函数的功能主要用于在类的对象创建时定义初始化的状态. 构造一个对象,先调用其构造方法

03继承与多态 动手动脑

动手实验:继承条件下的构造方法调用 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大! class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String st

继承与多态———动手动脑

public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printValue(); ((Child)pa

继承多态动手动脑

[1] 为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 提示: 构造函数的主要作用是什么? 从这个方面去想! [答] 构造函数(constructor)是一种特殊的方法.主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载.构造函数的功能主要用于在类的对象创建时定义初始化的状态. 构造一个对象,先调用其构造方法

java多态动手动脑

实验任务一:多态实现ATM工作原理 1)源代码: package demo; import java.util.Scanner; class A{ String name; String date; String mima; int yu; String kahao; public A(String name,String date,String mima,int yu,String kahao) { this.name=name; this.date=date; this.mima=mima;

第八章多态动手动脑

[动手动脑一] "类型转换"知识点考核-2 下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 先进行自我判断,得出结论后,运行TestCast.java实例代码,看看你的判断是否正确. class Mammal{} class Dog extends Mammal {} class Cat extends Mammal {} public class TestCast { public stat

课堂继承与多态作业

问题一: 解决: 之所以调用父类的构造方法是因为在父类中,可能存在私有属性需要在构造方法内初始化,不能反过来,因为子类继承父类,子类的构造方法在第一句会隐式的调用父类的构造方法,完成初始化. 问题二: 解决: 判断第二个和第四个出现错误 运行结果截图: 经过运行,第二个,第四个和四五个不能正常运行 原因: 子类对象可以直接赋给基类变量. 基类对象要赋给子类对象变量,必须执行类型转换 第二个需要强制转换为子类,第四个子类之间不能转换,第五个之前m已经转化为Dog类,再转化为子类Cat与第四个错误相

继承与多态——动手又动脑

1.首先,第一次执行完源代码后 了解到当调用一个子类的构造方法时,它会依次调用父类的构造函数.以下是原因:当一个类继承了其它类时,在它的构造函数(constructor)中super()必须被首先调用,如果super()没有被调用,则编译器将在构造函数(constructor)的第一行插入对super()的调用.这就是为什么当创建一个子类的对象时会调用父类的构造函数(constructor)的原因. 通过super调用基类构造方法时,必须是子类构造方法中的第一个语句.否则就会报错 构造一个对象,

多态动手动脑

一.怎样判断对象是否可以转换?可以使用instanceof运算符判断一个对象是否可以转换为指定的类型,参看实例: TestInstanceof.java public class TestInstanceof { public static void main(String[] args) { //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类 //但hello变量的实际类型是String Object hello = "Hello"

06-继承与多态-动手动脑

1.怎样判断对象是否可以转换? 答:可以使用instanceof判断一个对象是否可以转换为目标类型: 1 public class TestInstanceof 2 { 3 public static void main(String[] args) 4 { 5 //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类 6 //但hello变量的实际类型是String 7 Object hello = "Hello"; 8 //Strin