废话不多说,看代码.
public class a2 extends a1{
public void aa(){
System.out.println("a2的方法");
}
public static void main(String []args){
a2 t =new a2();
a1 t2 = new a2(); //这句话是什么意思,作用是什么.
t2.aa(); //这句我理解,就是调用a2的方法.
a1 t3 = (a1) t; //这句又是什么意思,作用是什么.
t3.aa();//这句又是调的哪个方法呢?
}
}
class a1{
public void aa(){
System.out.println("a1的方法");
}
public static void main(String[]args){
a1 t = new a1();
t.a1();
}
}
新人新手,实在不理解,请各位大侠给帮忙详细解答解答.不胜感激~~~~~~~~~~~~~~~~~~~
public class a2 extends a1{
public void aa(){
System.out.println("a2的方法");
}
public static void main(String []args){
a2 t =new a2();
a1 t2 = new a2(); //这句话是什么意思,作用是什么.
t2.aa(); //这句我理解,就是调用a2的方法.
a1 t3 = (a1) t; //这句又是什么意思,作用是什么.
t3.aa();//这句又是调的哪个方法呢?
}
}
class a1{
public void aa(){
System.out.println("a1的方法");
}
public static void main(String[]args){
a1 t = new a1();
t.a1();
}
}
新人新手,实在不理解,请各位大侠给帮忙详细解答解答.不胜感激~~~~~~~~~~~~~~~~~~~
a1 t3 = (a1) t; // 把一个common的对象转换为一个special的对象
t3.aa();// 方法调用看创建时候的对象是哪个类(也就是new 后面的类是什么) 属性则看调用时的对象是 属于哪个类的。 这里就是a2的方法。
回答:这是多态性的体现 作用就是可以使你的程序更为通用。
a1 t3 = (a1) t; //这句又是什么意思,作用是什么.
回答:将 子类向上转型到父类的类型、
t3.aa();//这句又是调的哪个方法呢?
回答:由于被向上转型为父类类型,所以调用的是父类的方法
public class a2 extends a1{
public void aa(){
System.out.println("a2的方法");
}
public static void main(String []args){
a2 t =new a2();//new一个类型为a2的对象t
a1 t2 = new a2(); //new一个类型为a1的对象t2
t2.aa(); //这行是调用对象t2的aa方法,t2的类型是a1,打印出来的应该是"a1的方法"
a1 t3 = (a1) t; //t3是转换成a1类型的对象t
t3.aa();//既然现t3的类型是a1,调用的当然是class a1的方法
}
}
class a1{
public void aa(){
System.out.println("a1的方法");
}
public static void main(String[]args){
a1 t = new a1();
t.a1();
}
}
a1 t2 = new a2();
一个是a1类里的变量t2 ,让他指项a2 new出的的内存空间,是这意思吗?这有意思吗?
a2的方法
是有重名的方法
还有这里里面 t.a1 是不能用的。 静态方法不允许调用非静态的方法和属性
class a1{
public void aa(){
System.out.println("a1的方法");
}
public static void main(String[]args){
a1 t = new a1();
t.a1();
}
}
但是a2是继承了a1,可以说a1里有的,a2里都有,甚至比a1里的要多的多,那么为什么不写成 a1 extends a2
更好呢?而要用 a1 t2 = new a2(); 语句呢? 这样写有什么实际意义和好处呢?
1楼贴,a1最后是 t.aa(),我敲的时候敲错了~~~~~~
在集合里面
Collection c= new ArrayList();这个c 可以应用个种不同的集合一样。可以方便的适用各种数据类型。
method1(a2 param) {
}
method2(a1 param) {
}
定义成接口method2的好处就是,无论有多少子类扩展了a1,这个方法都不用修改。定义成接口1就需要每次增加新的子类,就必须增加一个方法。
t2.aa(); //这是调用a2的方法aa
a1 t3 = (a1) t; //这里应该是强转t为a1的类型
t3.aa();//用t3去点a2的方法aa
public String toString(){
return "za";
}
public static void main(String []args){
a2 t =new a2();
Object t3 = (Object) t;
t3.toString(); }
}
它用的不是a2的toString。
搞不懂,可以确定的是a1 t3 = (a1) t;转型并不成功。
期待讨论中