什么是继承:
特点:
具有层次结构
子类继承了父类的属性和方法
优点:
代码的可重用性
可以轻松地自定义子类
父类的属性和方法可用于子类
设计应用程序变得更加简单
继承的java实现
继承性——在已有类的基础上,加入新的成员变量和方法后,派生出新的类
class SubClass extends SuperClass
{
类体 …
}
构造器调用
1. 如果省略了super()语句,则父类中没有参数的构造器还是会被调用的。
2. 调用父类构造器的super()语句必须写在子类构造器的第一行,不能置于它处,否则编译时将出现错误信息。
3. super会根据参数数目和类型,执行相对应的父类的构造器或方法。
Super关键字
相似点:
this()与super()均会根据所给予的参数类型与个数,正确执行相对应的构造器
在调用构造器时,this()与super()都必须写在构造器的第一行,因此,两者无法同时存在统一方法体内
不同点:
this()在同一类内调用
super()是子类调用父类的成员
基类object
类之源—Object 类
基类Object:所有类的祖先
在java里,如果某一类没有指定其父类的话,则java会自动赋值改类继承自Object类
在Object子类中能够重写以下Object类的方法:
· clone().
· equals()/hashCode(): 这两个方法必须同时重写。
· finalize().
· toString(): 返回对象的字符串表示,表达的内容因具体的对象而异。
在Object子类中不能重写的方法,他们被定义成final:
· getClass().
· notify().
· notifyAll().
· wait().
equals()方法:
Object类的public boolean equals(objectobj)方法,比较当前对象的引用是否与参数obj指向同一个对象则返回true.
但是String,Data,File类和所有包装类(Wrapper class,如Integer ,Long等)都重写该方法,改为比较所指对象的内容。
另外,Java中的恒等运算符“==”对于引用型变量,比较的是这两个变量所指对象的地址。
所以比较两个字符串str1和str2是否相同,应该使用equals()方法,如str1.equals(str2),而不能使用“==”。
/*
解释(待更新)
*/
Protected 访问控制修饰符
如果父类的成员希望子类继承
但父类成员不希望其它包中的类访问
父类成员使用protected修饰符
防止继承
在类前加上修饰符final,可以防止类被继承
Final关键字
在类的声明中使用final
Java 允许在类的声明中使用final关键字。
被定义成final的类不能再派生子类。
在成员方法声明中使用final
对于类中的成员也可以定义为final。被定义成final的方法不能被重写。
/***********/
定义成final的方法可以使运行时的效率优化。
对于final方法,编译器可以产生直接调用方法的代码,从而阻止运行时刻对方法调用的动态联编(编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序运行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编。)。
/***********/
在成员变量中使用final
如果的类的成员变量被定义成final,则变量一经赋值就不能改变,
所以可以通过声明变量并同时赋初值来定义变量,并且变量名一般大写。
例: final int NUMBER = 100;
1. 如果类的final变量在声明中没有赋初值,则在每个构造方法(构造器)中都 必须对该变量赋值。
2. 如果未赋值的是 局部变量,则可以在所属方法体的任何位置对其赋值,但只能赋值一次。
关于继承的一些结论
子类不能继承父类中访问权限为private的成员变量和方法
子类可以重写父类的方法,也可以重写命名与父类同名的成员变量,需注意访问控制修饰符
父类对象不能使用子类的特有成员
Java仅支持单继承
Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的
问题:
1. 一个类可以有多少个父类,Java是单继承还是多继承?
单继承。
2. Object是所有Java类的基类,它定义在哪个包中?