06-继承与多态 课程作业01 完成课件中的动手动脑的或需要验证的相关内容

一、怎样判断对象是否可以转换?

  可以使用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           //String是Object类的子类,所以返回true。
 9           System.out.println("字符串是否是Object类的实例:" + (hello instanceof Object));
10          //返回true。
11          System.out.println("字符串是否是String类的实例:" + (hello instanceof String));
12          //返回false。
13          System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));
14          //String实现了Comparable接口,所以返回true。
15          System.out.println("字符串是否是Comparable接口的实例:" + (hello instanceof Comparable));
16          String a = "Hello";
17          //String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过
18          //System.out.println("字符串是否是Math类的实例:" + (a instanceof Math));
19      }
20  }

运行截图:

二、现在有三个类: 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对象。

运行截图:

结论:

对象之间互相赋值时,子类对象可以对父类对象赋值,父类对象不能对子类变量赋值,继承与同一基类的平行子类之间不能相互赋值。

三、运行并测试以下代码:

 1  public class ParentChildTest {
 2       public static void main(String[] args) {
 3           Parent parent=new Parent();
 4           parent.printValue();
 5           Child child=new Child();
 6           child.printValue();
 7
 8           parent=child;
 9           parent.printValue();
10
11          parent.myValue++;
12          parent.printValue();
13
14          ((Child)parent).myValue++;
15          parent.printValue();
16
17      }
18  }
19
20  class Parent{
21      public int myValue=100;
22      public void printValue() {
23          System.out.println("Parent.printValue(),myValue="+myValue);
24      }
25  }
26  class Child extends Parent{
27      public int myValue=200;
28      public void printValue() {
29          System.out.println("Child.printValue(),myValue="+myValue);
30      }
31  }

运行结果:

总结:

子类可以赋值给父类,代表父类变量引用子类的对象。子类可以覆盖父类,覆盖后引用的是子类的方法,如果需要引用父类的方法可以用super函数。

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

这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。这个特性实际上就是面向对象“多态”特性的具体表现。

如果子类与父类有相同的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,

可以用super关键字来访问它。如果子类被当做父类使用,则通过子类访问的字段是父类的。

时间: 2024-09-29 11:42:30

06-继承与多态 课程作业01 完成课件中的动手动脑的或需要验证的相关内容的相关文章

课程作业01:模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。

1.设计思想: 首先是从JavaAppArguments.java示例开始,此示例已打印参数,定义数字 之和和作为存储单位的整型,然后将输入参数的字符串转化为整型,之后求和即可. 2.程序源码: //课程作业01 //李慧,2016.9.20 package demo; public class CommandParameterSum { public static void main(String[] args) { // TODO Auto-generated method stub Sys

06继承与多态

继承与多态动手动脑问题: 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(

06 继承与多态

动手实验 因为子类继承于父类,构造方法相当于对象初始化,只有父类先完成初始化,子类对象才能执行自己的初始化.子类在进行初始化的时候会默认调用父类的构造,所以不能反过来. 2 动手动脑 代码: 1 package Parent_son; 2 class Parent 3 { 4 public int value=100; 5 6 public void Introduce() 7 { 8 9 System.out.println("I'm father"); 10 11 } 12 } 1

课程作业01的设计思想。源程序代码和结果截图

好,—>这个图是代码结果截图. 第一次课堂作业的 思想 . 从 图书馆的书中获得程序思想 和 英语单词拼法 , 再做一点错误 , 以确保和一桌的同学不完全一样以致老师 看多了一样的代码作业答案后 恼羞成怒 又刚好抓到我 . 然后 给老师说的是: ......还是一样说. 首先,弄一个有 参数个数 长度的循环 ,循环累加给一个变量,而这个变量由我定义.而且这个循环累加被强制类型转换为int类类型.输出我定义的变量.就是这么简单.好吧就是这么难. 首先,第一句,怎么弄有参数长度的循环?怎么弄?不会.

继承与多态 - 课后作业

1 . 继承条件下的构造方法调用 class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } } class Parent extends Grandpar

课程作业01

1.设计思想: 由JavaAppArguments.java示例开始,此示例已打印参数,定义一个整形变量,然后将输入参数的字符串转化为整型,之后求和即可. 2.程序源码: //张铄 2016.9.26 package B; public class C{ public static void main(String[] args) { System.out.println("参数个数:"+args.length); int sum = 0;           int Num;   

课程作业01的思路

设计思想: 先建立一个基础的类包,抛出异常处理机制,我上网找了一下输入输出机制的博文最后采用了Scanner输入的方法简化了程序的代码(注: Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序.它是以前的StringTokenizer和Matcher类之间的某种结合.由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分.于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法.这样,除了能使用正则表达式之外,Scann

课程作业01 相加运算

1.实验目的 编写一个程序使得能从命令行接受多个数字,求和后输出结果 2.设计思路 输入多个字符串,遇到空格则划分,于是把它们划分成几个数,通过一个for循环输出数组里面的所有元素,并在另一个for循环里将字符串转换成整数,再进行求和得出结果,有将结果转换为字符串类型,最后输出. 3.程序流程图 5.程序源代码 1 package demo; 2 3 /*实验目的:编写一个程序使得能从命令行接受多个数字,求和后输出结果 4 作者:石家庄铁道大学信1403-2班刘柳 5 日期:2015年9月25日

课程作业01:编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。

思路:用循环输出参数,再将参数转化为整型,再求和. 流程图: 源代码: 1 public class JavaApp { 2 public static void main(String[] args){ 3 System.out.println("参数个数:"+args.length); 4 int x = 0; 5 for(String arg : args){ 6 System.out.println(arg); 7 8 x = x + Integer.parseInt(arg)