类和对象的继承关系
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
继承
继承用到的关键字是“extends”,表示子类 继承父类,或者称为扩展父类
一个父类可以有多个子类,除了Tiger还有 Lion等都可以继承Animal,但是一个子类只 能有一个父类,顶级父类是 java.lang.Object
继承的优点
代码的可重用性 可以轻松的定义子类 父类的属性或方法用于子类 设计应用程序变得更加简单
子类构造方法中第一行通过super( … )调用。
class Employee{ ...
public Employee( String n){
name=n;
}
}
class Manager entends Emplyee{
public Manager( String s,String d){
super(s);
toString方法
Object类中定义有public String toString()方法,其返 回值是 String 类型,描述当前对象的有关信息。
在进行String与其它类型数据的连接操作时(如: System.out.println(“info”+person)),将自动调用 该对象类的 toString()方法
则 a instanceof Manager 为true;
类型转换
父类弱、子类强,指向父类的引用不能直接按子类引用,
必须要强制类型转换后才能作为子类的引用使用。
例:public void method( Employee e){
if (e instanceof Manager){
Manager m = (Manager) e ;
name = n ; salary = s; } public Employee( String n){ this(n,0); } public Employee( ){ this(“Unknown”); } }
2
类
类是具有相同特征和行为的一组对象的集合 类有属性和方法,类是一个概念,类不对应具体的实体
public Tiger(String name, int weight, int height, String gender) { super(name, weight, height); this.gender = gender;
}
这里,Tiger类继承了Animal类的name,weight,height 等属性和sayHello ()方法,通过子类就能直接调用父类里 的方法,子类里边还添加了eat()方法扩展了原有的行
重载必须遵守原则: • 参数表必须不同,以此区分不同方法体。 •返回类型、修饰符可相同或不相同。
1
激活重载的构造方法
在一个构造方法中可以利用另一个构造方法。 class Employee{
private String name; private int salary; public Employee(String n, int s){
-- super 指向该关键字所在类的父类。
13
单继承
Java是单继承的,即只能从一个类继承, extends后类名只能有一个。
单继承的优点: •代码更可靠 •可以用接口弥补
用一个类实现多个接口,达到多继承效果。
14
类的继承与权限控制
Java 中使用 extends 关键字实现类的继承机制 通过继承,子类自动拥有了基类(superclass)的所有成员(成员变
}
a.sayHello();
}
}
}
public Animal(String name, int weight, int height) { this.name = name; this.weight = weight; this.height = height;
} public Animal() { }
方法的重写(OverWrite OverRide)
在子类中可以根据需要对从基类中继承来的方法进行重写 。
重写方法必须和被重写方法具有相同方法名称、参数列 表和返回类型。
重写方法不能使用比被重写方法更严格的访问权限。 例子:TestOverWrite.java
重写(Overriding methods)
动物
员工
学生
老虎 鸟
经理 会计
大学生 研究生
继在承我们遇到的实际问题当中,经常会遇到
“is a”或者称为“是一个”的描述,比如“老虎 是个凶猛的动物”,这里边动物是个类,而 老虎也是一个类,这两个类之间存在一种 关系,我们管它叫“继承”
在继承关系里,“is a”后面的成为父类,前 面的成为子类,称为子类继承父类,俗称 ,子类扩展了父类.子类继承父类的时候, 子类自然而然拥有了父类的特征和行为, 同时,子类还具有与父类通用描述特殊的 地方
例:public class Employee { int eid String name ; Date hireDate ; Date dateofBirth ; String jobTitle ; int sgrade ; … }
public class Manager { int eid String name ; Date hireDate ; Date dateofBirth ; String jobTitle ; int sgrade ; String department ; Employee [ ] subordinates;
public class Animal {
public class Tiger extends Animal {
private String name;
继承private int weight; private int height;
private String gender; public String getGender() { return gender;
继承中的构造方法
在继承关系中,当我们创建子类的实例的 时候先调用父类的构造方法再调用子类的 构造方法;
默认情况下,调用的是父类的默认构造方
法,也就是无参的构造方法,如果想调用 public Animal(String name, int weight, int height) { this.name = name; public Tiger(String name, int weight, int height, String gender) {
在java中,我们定义的所有类型都直接或间
类之间的继承关系
模拟员工程序,需要构造父类 熟悉构造方法调用过程 使用super(),super.method()
Employee 员工
Manager 经理
Accountant 会计
Dustman (清洁工)
package com.olcp;
package com.olcp;
public void eat(){
}
System.out.println("我吃肉");
。。。
}Fra Baidu bibliotek
public void sayHello(){
public static void main(String args[]){
System.out.println("hello");
Animal a = new Animal();
量和方法)。 Java只支持单继承,不允许多继承:
一个子类只能有一个基类 一个基类可以派生出多个子类 例子: TestExtends.java
访问控制
Java权限修饰符 public protected private 置于类的成员定义 前,用来限定其他对象对该类对象成员的访问权限。
对于class的权限修饰只可以用 public 和 default。 public类可以在任意地方被访问 default类只可以被同一个包内部的类访问
... }
}
22
Object类
Object类是所有Java类的根基类 如果在类的声明中未使用extends关键字指明其基类,则默认基类为
Object类 public class Person { ... }
等价于: public class Person extends Object { ... }
访问修饰符
信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰 符的原因
信息隐藏的原因包括:
对任何实现细节所作的更改不会影响使用该类 的代码
防止用户意外访访删问问除修修数饰饰符据符
此类易于使用
private
protected
public
默认
父类-子类
子类表示类之间一种“属于”( is a )关系。
public int getHeight() {
}
return height;
public void setGender(String gender) {
}
this.gender = gender;
public void setHeight(int height) {
}
this.height = height;
…
}
11
Extends 关键字
Java中用 extends 关键字定义子类。
public class Employee { String name ; Date hireDate ; Date dateofBirth ; String jobTitle ; int grade ; … }
public class Manager extends Employee {
“==”与equals()方法
“==”运算符一般用于基本数据类型的比较中。如果对两个引用对象 作比较,两个引用变量引用同一个对象时,返回true,否则返回 false。
Sting s1 = new String (“abc”);
Sting s2 = new String (“abc”);
System.out.println(s1==s2);
重载(Overloading)
含义:在同一个类中一个方法名被用来定义多个 方法。
classScreen { public void print( int i){ … } public void print( float i){ … } public void print( String str ){ … } }
m.department = “…”;
…
}
}
20
子类对象的初始化
初始化对象是很结构化的。 在对对象初始化时,分三步:
•分配空间,并初始化为“0”值。 •按继承关系从顶向下显式初始化。 •按继承关系从顶向下调用构造函数。
21
调用父类构造方法
缺省是不带参数的构造方法。
如果需要调用特殊的父类构造方法,则需在
运行结果 打印输出 false
String department ; Employee [ ] subordinates;
}
子类是从已有的类创建新类的一种方法。
12
子类
子类继承父类的属性、功能(方法),子类中只 需声明特有的东西。
带private 修饰符的属性、方法是不能被继承的。 构造函数不能被继承。 在方法中调用构造方法用this()。 调用父类的构造方法用super()。
this.weight = weight;
super(name, weight, height);
父类的带参数的构造方法需要在子类的构 this.height = height;
this.gender = gender;
}
}
public Animal() {
造} 方法里边第一个语句使用super(参数);
构造方法是不被继承的,每个类有自己的 构造方法
类的继承与权限控制
Java 中使用 extends 关键字实现类的继承机制 通过继承,子类自动拥有了基类(superclass)的所有成员(成员变
量和方法)。 Java只支持单继承,不允许多继承:
一个子类只能有一个基类 一个基类可以派生出多个子类 例子: TestExtends.java
子类可以改变从父类继承的行为。 被重写方法的返回值、方法名、参数列表要
与父类中的方法完全一样。
18
方法重写的规则
必须返回与原来方法完全相同的返回值。 方法的访问权限不能缩小。 不能抛出新的例外。
19
“instanceof”及类型强制转换
Instanceof 测试对象类型
Empolyee a = new Manager();