看见有人问过这些问题,将自己原来写过的程序发给大家看一下
/*
2013/5/16 0:38:21
抽象类和多态的应用:
1、当定义的一个抽象类时,应在其class前面添加abstract(抽象),
在其内也需要添加abstract。
2、抽象的应用:当你点击一个菜单,菜单就相当予一个抽象类,它
不执行任何一个东西,但菜单中得子项,也就是它的子类可以可
以执行其下的命令。
3、抽象和多态的应用:抽象表示为一个动得含义,但其没有任何动
的命令去执行,这样就是抽象类,但其下面的子类,如人、鱼、
猫、等只需要用到多态的特性,将子类赋给基类,基类调用子类
继承来得动这个函数,就能实现人、鱼、猫、三者的动得命令。
*/
abstract class A
{
abstract public void f()
}
class B extends A
{
public void f()
{
System.out.printf("BBBB\n");
}
}
public class TestAbsPoly_1
{
public static void main(String[] args)
{
B bb = new B();
bb.f();
//A aa = new A();//error
A aa;//可以定义一个抽象类的引用,但是不能定义
aa = bb;
aa.f();
*/
class A
{
public void f()
{
System.out.printf("AAAA\n");
}
}
class B extends A
{
public void f()
{
System.out.printf("BBBB\n");
}
public void g()
{
System.out.printf("GGGG\n");
}
}
public clsaa Test_A
{
public static void main(String[] args)
{
A aa = new A;
B bb = new B;
aa = bb;
aa.g();//错误写法,语法不错误
}
}
/*
2013/5/15 22:47:55
1 、在子类可以转化为父类(aa = bb),但这里是将bb中得地址赋给aa,
aa就可以调用bb中得值
2 、不可以将(bb = aa ),因为基类是一个一般值,不是特殊值,而子
类是一个特殊值,即特殊值可以转化成为一般值,也就表明在一个类
组中子类可以变为基类。(*-*但此处应记住有一个特殊情况)
3 、在第2项中也说明不能将基类赋给子类,但又以个特殊例子,先进行
aa = bb; 在写bb = (B)aa,因其在执行父类转化子类之前,已将
将子类的地址发给基类,此时基类aa代表子类,所以可以正常进行,
(*-*但为什么上面已经将子类地址发送给基类,还要在后面加强制,
转化呢?
---一种解释:java语法对这种语言不支持,
二中解释:防止程序员在不明白其中原理情况下,进行的未知性操作)。
*/
class A
{
public void f()
{
System.out.printf("AAAA\n");
}
}
class B extends A
{
public void f()
{
System.out.printf("BBBB\n");
}
}
public class Test_B
{
public static void main(String[] args)
{
A aa = new A();
B bb = new B();
bb.f();
aa.f();