谁能帮我把这个java代码分析一下我被绕晕了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能帮我把这个java代码分析一下我被绕晕了相关的知识,希望对你有一定的参考价值。
public class PolyDemo09
public static void main(String[] args)
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println("⑴ " + a1.show(b));
System.out.println("⑵ " + a1.show(c));
System.out.println("⑶ " + a1.show(d));
System.out.println("⑷ " + a2.show(b));
System.out.println("⑸ " + a2.show(c));
System.out.println("⑹ " + a2.show(d));
System.out.println("⑺ " + b.show(b));
System.out.println("⑻ " + b.show(c));
System.out.println("⑼ " + b.show(d));
class A
public String show(D obj)
return ("A and D");
public String show(A obj)
return ("A and A");
class B extends A
public String show(B obj)
return ("B and B");
public String show(A obj)
return ("B and A");
class C extends B
class D extends B
这是我运行的结果但是我分析不出来为什么这样
//首先这道题楼主要明白以下两点:
//1:继承时,子类会隐藏父类相同的方法,要调用父类方法就必须使用super关键字。
//2:向上转型时,子类会丢失和父类不同的方法,可以使用父类的不同名的所有方法。
public class PolyDemo09
public static void main(String[] args)
A a1 = new A();
A a2 = new B();//B类型向上转型丢失与A类不同方法
B b = new B();
C c = new C();
D d = new D();
System.out.println("⑴ " + a1.show(b));//B类的父类是A,所以A and A
System.out.println("⑵ " + a1.show(c)); //C类父类的父类是A,D和他是同级。所以A and A
System.out.println("⑶ " + a1.show(d));//D类方法有,所以不会向上转型,所以A and D
System.out.println("⑷ " + a2.show(b)); /*注意这时候a2的两个方法其实是
public String show(D obj)
return ("A and D");
public String show(A obj)
return ("B and A");
B的父类是A,所以B and A
*/
/**/
System.out.println("⑸ " + a2.show(c));//C的父类的父类是A,所以B and A;
System.out.println("⑹ " + a2.show(d)); //D有对应方法,所以A and D
System.out.println("⑺ " + b.show(b)); /*这个就是继承了,继承除了隐藏父类中和子类同名的方法外,在子类中可以直接使用父类的方法。所以B and B
所以就变成了
public String show(D obj)
return ("A and D");
public String show(B obj)
return ("B and B");
public String show(A obj)
return ("B and A");
*/
System.out.println("⑻ " + b.show(c)); //C 的父类是B,所以B and B
System.out.println("⑼ " + b.show(d));//D有相应方法,所以A and D
class A
public String show(D obj)
return ("A and D");
public String show(A obj)
return ("A and A");
class B extends A
public String show(B obj)
return ("B and B");
public String show(A obj)
return ("B and A");
class C extends B
class D extends B
参考技术A a1.show(b));Class A 中没有show(B obj),B转向B的父类A,执行A show(A obj)--->return "A and A"
a1.show(c));Class A 中没有show(C obj),C转向C的父类B,Class A 中没有show(B obj),再转向父类A,执行A show(A obj)--->return "A and A"
a1.show(d));Class A 中有show(D obj)执行A show(D obj)--->return "A and D"
这个比较特殊:A a2 = new B();父类声明,子类实例,你应该把a2当作子类重写完后的父类看,注意只有父类的方法。
a2.show(b));Class A 中没有show(B obj),B转向B的父类A,执行A show(A obj),A的show 方法被重写,执行B show(A obj)--->return "B and A"
a2.show(c));Class A 中没有show(C obj),C转向C的父类B,Class A 中没有show(B obj),B转向父类A,执行A show(A obj),A的show 方法被重写,执行B show(A obj)--->return "B and A"
a2.show(d));Class A 中有show(D obj)执行A show(D obj)--->return "A and D"
b.show(b)); Class B 中有show(B obj)--->return "B and B"
b.show(c)); Class B 中没有show(C obj),C转向C的父类B,执行B show(B obj)--->return "B and B"
b.show(d)); Class B 中有继承了Class A 的show(D obj),执行A show(D obj)--->return "A and D"本回答被提问者采纳 参考技术B 考察的是java的多态知识,主要是父类引用指向子类对象,比如⑴ A and A,a1.show(b),看a1是A的实例然后在A类的方法里找没有show(B obj),然后找有没有show(X obj),X是B的父类(找到了);其实如果没找到在A类的子类里找与没有show(B obj),然后找有没有show(X obj),X是B的父类;就这样找 参考技术C a1.show(b)而言,a1是A类,由b类型可知,要调用的方法从A中找,即show(A obj);所以会输出第一行结果;
其余皆可这么分析追问
找你这么说那第五个和第六个怎么分析
追答来晚了 上面有更好的回答 就不废话了
参考技术D我画了个图也有两个没明白(4)(5)
追问能不能再加点文字说明,还是有点看不明白
java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType这个异常怎么解决 谁能帮我一下
import 。。。
public class addminBlogHibernatebak<T,PK extends Serializable> implements AdminBlogDao<T, PK>
private Class<T> clazz;
public addminBlogHibernatebak()
clazz=(Class<T>)((ParameterizedType)getClass ().g etGenericSuperclas()).getActualTypeArguments()[0];
public void delete(T entity)
Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.delete(entity);
public void update(T entity)
Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.update(entity);
问题出在构造方法上 每次运行程序时就出现上面的异常.谢谢大家啊 都是热心人
我感觉是泛型我使用的方法不对 希望大家能在这方面帮小弟一下
构造方法写得没错,是泛型用错了,有两种解决方案。
1、再写一个子类继承这个类,子类可以没有任何属性和方法,但必须指明泛型类型,然后使用子类创建对象。
2、写一个含有Class<T>类型的构造方法,在使用该类创建对象时给出具体类型。
软件包 java.lang.reflect 的描述。
提供类和接口,以获取关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法的信息,并允许使用反射字段、方法和构造方法对对象上的基本对等项进行操作。
如果必需的ReflectPermission可用,则AccessibleObject允许抑制访问检查。
参考技术A 构造方法写的没错,是泛型用错了,有两种解决方案,1.再写一个子类继承这个类,子类可以没有任何属性和方法,但必须指明泛型类型,然后使用子类创建对象 2.写一个含有Class<T>类型的构造方法,在使用该类创建对象时给出具体类型 参考技术B 有Class A 跟 Class BA跟B没有任何关系
你把A塞给B就抛这个异常了 参考技术C 转换异常了。。。上面说的都有道理!!! 参考技术D 就是说你拿到的是String变量,你把它强制转换成Date型的所以出错
你可以用Format类或者自己分析carno的格式转换成Date类型
比方carno="2001/01/01";
就可以String[] s = carno.split("/");
new Date(Integer.parseInt(s[0]), Integer.parseInt(s[1]), Integer.parseInt(s[2]));之类的处理
以上是关于谁能帮我把这个java代码分析一下我被绕晕了的主要内容,如果未能解决你的问题,请参考以下文章
#FF99FF这是粉色字的颜色代码,有谁能帮我把它转成十进制的代码哦?~谢谢~!