class A{
public void fun1(){
System.out.println("A类对象");
}
public void fun2(){
this.fun1();
}
}
class B extends A{
public void fun1(){
System.out.println("B类中的实例");
}
public void fun3(){
System.out.println("B类中3的实例");
}
}
class C extends A{
public void fun1(){
System.out.println("C类中的实例");
}
public void fun4(){
System.out.println("C类中的4实例");
}
}
class DTest4{
public static void main(String args[]){
fun(new A());
fun(new B());
fun(new C());
}
public static void fun(A a){
a.fun2();
if(a instanceof B){
System.out.println(a instanceof B);
B b =(B)a;
b.fun3();
}
if(a instanceof C){
System.out.println(a instanceof C);
C c = (C)a;
c.fun4();
}
}
}主类的代码帮我分析下 谢谢
public void fun1(){
System.out.println("A类对象");
}
public void fun2(){
this.fun1();
}
}
class B extends A{
public void fun1(){
System.out.println("B类中的实例");
}
public void fun3(){
System.out.println("B类中3的实例");
}
}
class C extends A{
public void fun1(){
System.out.println("C类中的实例");
}
public void fun4(){
System.out.println("C类中的4实例");
}
}
class DTest4{
public static void main(String args[]){
fun(new A());
fun(new B());
fun(new C());
}
public static void fun(A a){
a.fun2();
if(a instanceof B){
System.out.println(a instanceof B);
B b =(B)a;
b.fun3();
}
if(a instanceof C){
System.out.println(a instanceof C);
C c = (C)a;
c.fun4();
}
}
}主类的代码帮我分析下 谢谢
public void fun1() {
System.out.println("A类对象");
} public void fun2() {
this.fun1();
}
}class B extends A {
//覆盖了父类A中的方法fun1()
public void fun1() {
System.out.println("B类中的实例");
} public void fun3() {
System.out.println("B类中3的实例");
}
}class C extends A {
//覆盖了父类A中的方法fun1()
public void fun1() {
System.out.println("C类中的实例");
} public void fun4() {
System.out.println("C类中的4实例");
}
}public class TestExtend {
public static void main(String args[]) {
fun(new A());
System.out.println("*** end fun(new A())");
fun(new B());
System.out.println("*** end fun(new B())");
fun(new C());
System.out.println("*** end fun(new C())");
} public static void fun(A a) {
a.fun2();
if (a instanceof B) {
System.out.println("a instanceof B");
B b = (B) a;
b.fun3();
}
if (a instanceof C) {
System.out.println("a instanceof C");
C c = (C) a;
c.fun4();
}
}}运行结果:
A类对象
*** end fun(new A())
B类中的实例
a instanceof B
B类中3的实例
*** end fun(new B())
C类中的实例
a instanceof C
C类中的4实例
*** end fun(new C())
public void fun1() {
System.out.println("A类对象");// 4
} public void fun2() {
this.fun1();// 3
}
}class B extends A {
public void fun1() {
System.out.println("B类中的实例");
} /**
* 此方法是存在的 public void fun2() { this.fun1();// 3 }
*/
public void fun3() {
System.out.println("B类中3的实例");
}
}class C extends A {
public void fun1() {
System.out.println("C类中的实例");
} public void fun4() {
System.out.println("C类中的4实例");
}
}public class DTest4 {
public static void main(String args[]) {
/**
* 调用A类构造方法生成A类实例,将A类实例作为参数传入fun方法,到2 调用A类实例的fun2方法,到3
* fun2方法中再调用当前类实例的fun1方法,this关键字代表当前类 的一个实例,进入步骤4,打印A类对象
* 返回步骤2处继续执行,因为A既不是B的实例,也不是C的实例,该方法结束
*/
fun(new A());// 1
/**
* new B()调用B类构造方法声明B类实例,B类实例作为参数传入fun方法,进入步骤2,该B类实例调用
* fun2方法,到B类中找fun2方法,因为B继承了A类的fun2方法,因此调用当前实例的fun1方法,
* B类重写了A类的fun1方法,调用B类fun1方法,打印B类中的实例,返回到2处继续执行,因为该实例
*【 new B()】是B类的实例,到6,打印a instanceof B值为true,7处将B类实例转型为B类实例,此处
*似乎没有必要,调用B实例fun3方法,打印出B类中3的实例,结束
*/
fun(new B());// 5
/**
* 此处就不写了吧,看懂了上面的,这个依此类推,ok了
*/
fun(new C());
} public static void fun(A a) {
a.fun2();// 2
if (a instanceof B) {//6
System.out.println(a instanceof B);
B b = (B) a;//7
b.fun3();
}
if (a instanceof C) {
System.out.println(a instanceof C);
C c = (C) a;
c.fun4();
}
}
}
public void fun1(){
System.out.println("A类对象");
}
public void fun2(){
this.fun1();
}
}
class B extends A{
public void fun1(){
System.out.println("B类中的实例");
}
public void fun3(){
System.out.println("B类中3的实例");
}
}
class C extends A{
public void fun1(){
System.out.println("C类中的实例");
}
public void fun4(){
System.out.println("C类中的4实例");
}
}
public class DTest4{
public static void main(String args[]){
fun(new A());//将A丢进fun里当然调用它自己的fun1(),下面的两个条件都不成了。这一句只是打印“A类对象”。
fun(new B());//将B类的一个对象丢进去,多态其实执行的是B重写父类的fun1()。下面的分之一会执行。
fun(new C());//跟上面的差不多的分析
}
public static void fun(A a){//多态在这里被体现了,
a.fun2();
if(a instanceof B){
System.out.println(a instanceof B);
B b =(B)a;
b.fun3();
}
if(a instanceof C){
System.out.println(a instanceof C);
C c = (C)a;
c.fun4();
}
}
}