零基础小白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
代码中出现了新的关键字super,super用来调用超类中的数据。
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主要鉴于它们会不会在子类中改变语义。
- 零基础小白JAVA学习笔记(九)
- 零基础小白JAVA学习笔记(一)
- 零基础小白JAVA学习笔记(二)
- 零基础小白JAVA学习笔记(三)
- 零基础小白JAVA学习笔记(四)
- 零基础小白JAVA学习笔记(五)
- 零基础小白JAVA学习笔记(六)
- 零基础小白JAVA学习笔记(七)
- 零基础小白JAVA学习笔记(八)
- 零基础小白JAVA学习笔记(十)
- 零基础学习java(九)
- 零基础 Java 学习笔记
- JAVA零基础学习第一天笔记
- Java基础学习笔记:(九)简单java类深入
- 零基础学习java
- SQL零基础学习笔记(一)
- 零基础PHP学习笔记(二)
- java学习笔记(九)
- 零基础小白JAVA学习笔记(八)
- the import javax.servlet cannot be resolved问题
- SD卡中FAT16文件分析
- 【android中级】之Android ImageSwitcher和Gallery 综合使用
- 内核中断处理
- 零基础小白JAVA学习笔记(九)
- Profile
- 灰鸽子配置使用手册
- Oracle SQL tuning 步骤
- linux socket 错误码
- 【笔试面试必备】c排序汇总
- Apache地址重写的几个问题
- android sdk更新不了问题
- eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法