A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lanbuohan 中级黑马   /  2013-7-5 15:18  /  1584 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-8 12:32 编辑

看见有人问过这些问题,将自己原来写过的程序发给大家看一下
/*
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();
   
}
}
/*
2013/5/15 23:09:36
1、在多态中已经证明,可以将子类的地址赋给基类,此时
基类就可以去调用子类中得函数,但这个函数不是子类特
有地函数,是从基类继承来得函数,或者对从基类中继承
的继承的函数的重写函数(下面是对其的解释)。
2、基类如果通过这种多态的特性,可以调用子类的特有函数
  时,此时子类函数的安全性,已经不存在,同时也会造成
  程序的混乱。
3、 因为有多态我们可以将子类的地址赋给基类,但又因为
  多态的特性而不能允许,基类去调用基类特有函数,这种
  也是多态的一种特性。

*/
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();
   
   aa = bb;
   bb = (B)bb;
   bb.f();
   
   
}
}

评分

参与人数 1技术分 +1 收起 理由
赵海洋 + 1 态度不错,希望坚持,鼓励下。.

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马