正在阅读:面向对象编程,我的思想(下)面向对象编程,我的思想(下)

2004-06-01 10:14 出处:CSDN 作者:flashmagic 责任编辑:linjixiong



  public changeBWtv(int i){
  
  a=i;
  
  }
  
  }
  
  //Ctv.java 子类的定义
  
  class Ctv exntends BWtv{ //注意关键字“extends”
  
  private int b;
      
  public Ctv(){
    
  b=2;
  
  }
  
  public changetCv(int x){
  
  b = x;
  
  }
  
  }



  
  有了上面的定义,我们来看看他们都有什么数据。
  
  BWtv的数据包括     Ctv的数据包括
  
  private int a     private int a
  
             private int b
  
  public changeBWtv(); public changeBWtv()
  
  public changeCtv();
  
  你看,子类拥有父类的所有的方法及属性。注意关键字”extends”,它的意思是继承。在C++中使用的是“:”操作符。意思是一样的。但是这里有许多问题,首先是访问权限的问题,子类的对象拥有父类的所有的属性和方法这句话。对嘛?肯定是对的!(不过JAVA的书中可不是这么说的,他说只继承非private类型的属性及方法,我觉得它这句话有错误!)可是,子类的对象不能直接访问父类的私有属性或方法,它只能通过父类的公有成员函数来访问。而此时,如果你修改了父类的属性的值。那就真的修改了。我的意思是:父类的私有属性的值会随着子类对象调用父类的公有方法进行对相应属性的修改而发生变化!(这里面存在一个域的问题,所有的修改都是在子类中进行的,修改的是子类继承的父类的属性(在子类这个域中,此时父类以拷贝到子类中了。)。而程序中定义的父类的属性不会发生任何变化(在父类的域中),)
  
  其次是构造函数,在创建一个子类对象时首先要调用的是父类的构造函数,然后再调用子类的构造函数,毕竟,子类的构造函数不包括父类的属性的初始化功能!(从这一点来说我的观点又是正确的“子类的对象拥有父类的所有的属性和方法”)当然了,析够函数的调用顺序正好相反!
  
  现在让我们来谈谈protected这个关键字吧,它的意思是:对对象来说,声明为protected的变量是私有的,而对子类父类来说,声明为protected的变量是公共的。
  
  现在又出现了这样的一个问题,如果我们在子类中也定义了一个int 类型的变量a,那我们在创建子类的对象的时候调用的是子类定义的还是父类定义的呢?这就涉及到数据的隐藏的问题了,我可以告诉你肯定是调用的子类的变量a。因为,子类把父类的这个同名变量给隐藏了。而如果是方法呢?这就涉及到重构的问题了,在上面我提到过“函数重构是指在子类中声明与父类同名的方法,从而覆盖了父类的方法。重构解决了子类与父类的差异问题。”这里必须要声明一下的是,在JAVA中,子类出现了对父类属性的隐藏和父类方法的覆盖后,在子类中,子类对象仅能调用子类本身的属性和方法。要调用父类的属性和方法必须要实用super这个关键子。而在C++中就不这样了。因为它有虚函数



察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品