Java_log2000_类与对象4

来源:互联网 发布:剪切歌曲合成软件 编辑:程序博客网 时间:2024/06/03 22:11

类篇entry2

关键词: 继承; Object类; 多态;

继承

  • 通过extends关键字实现;
  • 子类可以从父类继承所有非private的属性和方法作为自己的成员;

子类在继承父类的时候,首先应该满足父类可被访问,例如当子类和父类不
在同一个包当中时,父类修饰符必为public;在父类能被访问的前提下,凡
是修饰符为public或是protected的父类属性成员或是方法能被子类所访问;
private的属性成员或是方法则不能被访问。

Object类

  • Object类是所有类的共同祖先,即使定义类时没有写extents Object。
  • 在Object当中定义了许多方法,这些方法都可以被所有子类所继承。

最终类

被final修饰的类为最终类,不能有子类。

多态

多态的定义

  • 多态的概念:多态是指一个程序中同名的不同方法共存的情况
  • Java中提供两种多态的机制:重载(overloading)与覆盖(overriding)

重载例1

  class Parent{     public int getScore(){         return 3;     }     public int getScore(int i){         return i;     }  }

类Parent中有两个getScore方法,它们的参数有所不同

重载例2
如:class Applet

- - AudioClip getAudioClip(URL url) 根据URL获得AudioClip对象 AudioClip getAudioClip(URL url, String name) 根据URL和name联合构成的URL得到AudioClip对象
public AudioClip getAudioClip(URL url) {      。。。。。。。; } public AudioClip getAudioClip(URL url, String name) {        try {        //通过重新构造一个新的URL对象,之后调用上面的同名方法来实现功能。    return getAudioClip(new URL(url, name));        } catch (MalformedURLException e) {        return null;        } }

重载例3
如:java.util.Class LinkedList

- - Boolean addAll(Collection c) 将一个集合对象插入到链表末尾当中 Boolean addAll(int index, Collection c) 将一个集合对象插入到链表的指定位置当中。
public boolean addAll(Collection c) {   return addAll(size, c);    //size是链表长度,此方法调用下面的方法,将传入对象插入到指定链表尾部}//index是链表的当前索引号public boolean addAll(int index, Collection c) {           ……} 

覆盖

子类对父类的同名方法(方法名称相同,参数相同,返回
类型相同)重新进行定义,即在子类中定义与父类中已定
义的相同名而内容不同的方法。

  • 方法名称相同,参数名称相同,返回类型相同:覆盖
  • 方法名称相同,参数名称不同:重载
  • 方法名称相同,参数名称相同,返回类型不同:编译不能通过

覆盖例1

class Parent {   public int getScore()   { return 3; }   public String getCountryName()   { return “China”; }}class Son extends Parent {    public int getScore(){      return 4;    } } public class RunSon{    public static void main(String args[]){      Son  s = new Son();      System.out.println(s.getScore());      System.out.println(s.getCountryName());      }}//----------------------输出结果:4China

覆盖——注意

  • 子类的访问修饰符权限应等于或大于父类
  • static方法不能覆盖非静态方法,也不能被非static方法覆盖,但是static方法可以覆盖static方法
  • 方法前有final修饰符,此方法不能在子类方法中进行覆盖
  • 在JDK中,很多父类的方法被子类重新覆盖,赋予了不同的含义,如Object类中的boolean equals(Object obj)方法
  • 抽象类中如果存在抽象方法,则具体子类必须对抽象方法进行覆盖

覆盖例2

class Super {    public Integer getLenght() { return new Integer(4); }}public class Sub extends Super {    public Long GetLenght() { return new Long(5); }    public static void main(String[] args) {         Super sooper = new Super();         Sub sub = new Sub();         System.out.println(         sooper.getLenght().toString() + "," +         sub.getLenght().toString() );     } }//-------------输出结果:44

visitor tracker
访客追踪插件


原创粉丝点击