多态

1.TestInstanceof.java

 

2.TestCast.java

 

   3.ParentChildTest.java

 

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)parent).myValue++;

parent.printValue();

}

}

class Parent{

public int myValue=100;

public void printValue() {

System.out.println("Parent.printValue(),myValue="+myValue);

}

}

class Child extends Parent{

public int myValue=200;

public void printValue() {

System.out.println("Child.printValue(),myValue="+myValue);

}

}

务必动脑总结,然后修改或编写一些代码进行测试,验证自己的想法

1.同名的实例方法被覆盖 ,同名的静态方法被隐藏,child类的 printValue实例方法覆盖了parent printValue实例方法,
2.隐藏 和覆盖 的区别在于,子类对象转换成父类对象后,能够访问父类被隐藏 的变量和方法,而不能访问父类被覆盖 的方法
3.如果需要访问父类被隐藏 的实例变量,加上super就好了,比如访问父类的name,写上super.name就好了

4. 动手动脑:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识

AboutException.java

有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如除数为0的异常。二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是Java语言中定义的,用throw 关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。

 Java异常处理通过5个关键字trycatchthrowthrowsfinally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象

5.CatchWho.java

 

CatchWho2.java

 

6.请先阅读 EmbededFinally.java示例,再运行它,观察其输出并进行总结。

   不管是否有异常发生,finally语句块中的语句始终保证被执行。

 

7.请通过 SystemExitAndFinally.java示例程序回答上述问题finally语句块一定会执行吗?

当一个线程在执行 try 语句块或者 catch 语句块时被打断(interrupted)或者被终止(killed),与其相对应的 finally 语句块可能不会执行。还有更极端的情况,就是在线程运行 try 语句块或者 catch 语句块时,突然死机或者断电,finally 语句块肯定不会执行了。可能有人认为死机、断电这些理由有些强词夺理,没有关系,我们只是为了说明这个问题。

 

8.PrintExceptionStack.java

 

9.ThrowMultiExceptionsDemo.java

 

10.OverrideThrows.java

 

11.ExceptionLinkInRealWorld.java

 

原文地址:https://www.cnblogs.com/wanggong2014/p/4965014.html