零基础小白JAVA学习笔记(九)

来源:互联网 发布:win7打开telnet23端口 编辑:程序博客网 时间:2024/04/30 04:54


继承(inheritance)

      和字面上的理解一样,人们可以基于一个已存在的类构造一个新的类,新的类可以继承已存在类的功能。

 

超类和子类

       关键字exends表明正在构造的新类派生于一个已存在的类。已存在的类被称为超类(superclass)、父类(parent class)或基类(base class;新类被称为子类(subclass)、派生类(derived class)或孩子类(child class)。超类和子类是Java程序员最常用的两个术语。

 

       接着来看关键字exends的使用,这里直接就引用书中的例子来说明了。

假设有一个已存在的Employee类(员工类),里面包含了姓名,入职时间和工作等一些员工的基本属性和方法。现在可以构造一个Manager类(经理类)来继承Employee类。

class Manager extends Employee

这样,Manager类中就包含了Employee类中的基本方法和属性了。

 

这里利用之前日志中的一段代码来说明超类和子类加载的先后顺序

 

class StaticCode

{

       private String name;

       public StaticCode(String name){this.name=name;}

       public StaticCode(){}

       static

       {

              System.out.println("A");

       }

       public String getName()

       {

              return name;

       }

}

class StaticCodeDemo

{

       static

       {

              System.out.println("B");

              StaticCode a = new StaticCode("Jake");

              System.out.println(a.getName());

             

       }

       public static void main(String[] args)

       {

              extendsDemo e=new extendsDemo();

              e.show();

              e.show(e.x);

              e.show(e.z);

              e.print();

              new StaticCode();

              new StaticCode();

             

              System.out.println("down");

       }

       static

       {

              System.out.println("b");

       }

}

class extendsDemo extends fu

{

      

       String x = super.name;

       String name="";

       static{System.out.println("f");}

       void show(){System.out.println(name);}

       void show(String x){System.out.println(x);}

       void show(int x){System.out.println(z);}

       void print(){super.show();}

}

class fu

{

       int z = 5;

       String name="";

       static{System.out.println("ff");}

       void show(){System.out.println(name);}

}

 

 

运行结果是:

B

A

Jake

b

ff

f

5

Down

 

 

由结果可知道,子类继承超类后,继承了父类中的属性和方法。在创建子类实例时,需要先加载超类。在子类中,如果子类重新给已经在超类中赋值的变量赋值,变量为子类新赋的值。超类中已经有的方法,但在子类中功能一致,但内容不同时,子类可以对这个方法进行覆盖。(注:子类覆盖超类方法,必须保证子类权限大等于超类权限,才可以覆盖,否则将编译失败。

 

 

关键字super

 代码中出现了新的关键字supersuper用来调用超类中的数据。

super的用法于this用法很接近,但需要区分的是super是引用超类,而this是引用对象。

 

继承关系

Java不支持多继承。但是继承可以有多个层次,如一个animal类,可以被多个如哺乳动物,两栖动物等继承,而哺乳动物又可以被灵长类或猫科类继承。

 

多态

有一个用来判断是否应该设计为继承关系的简单规则,这就是“is-a”规则,它表明子类的每个对象也是超类的对象。例如,每只猫都是动物,因此,可以将猫设计为动物的子类,反之则不行,任意的动物可以是鱼、狗或者鸟,并不一定是猫。

     is-a”规则的另一种表述法是转换法则。它表明程序中出现超类对象的任何地方都可以用子类对象置换。例如,可以将一个子类的对象赋给超类变量。

Cat c = new Cat();

Animal[] a = new Animal[3];

a[0] = c;

这个例子中,变量a[0]与c引用的是同一个对象。但编译器将a[0]看成是Animal对象。

 

 

阻止继承:final类和方法

       有的时候,可能希望阻止人们利用某个类定义子类。不允许扩展的类被称为final类。如果在定义类的时候使用了final修饰符就表明这个类是final类,不允许被继承。

 

 

final关键字:

Java中,利用关键字final声明常量。如:final int NUM=3;关键字final表示这个变量只能被赋值一次。一但被赋值以后,就不能够更改了。习惯上,常量名使用大写。需要注意,类常量的定义们于main方法的外部。因此,在同一个类的其他方法中也可以使用这个常量。且,若一个常量被声明为public,那么其他类的方法也可以使用这个常量。将方法和类声明为final主要鉴于它们会不会在子类中改变语义。



原创粉丝点击