4继承与多态-1pp
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1继承---解决重用问题
拷贝、粘贴源代码
–低级重用
类的重用
–不需要源代码,只要class文件
–javap文件名可得到类的public方法头
2
4.1.1 Java的继承
[修饰符] 子类名extends 父类名
{
类体
}
•没有extends,默认父类为Object
•只能有一个父类,即单继承
•子类继承父类的非私有部分
•类继承具有传递性
6
子类与父类的属性与方法
父类中的private部分子类不能直接引用
子类中新增加的属性和方法是对父类的扩
展
子类中定义的与父类同名的属性是对父类
属性的隐藏,同名的方法是对父类方法的
重载或覆盖
7
public class Book{
protected int pages;
public Book(int numPages) {
pages = numPages;
}
public void pageMessage()
{
System.out.println("Number of pages: " + pages);
}
}
9
public class Dictionary extends Book{
private int definitions;
public Dictionary(int numPages, int numDefinitions) { super (numPages);
definitions = numDefinitions;
}
public void definitionMessage() {
System.out.println("Number of definitions: " + definitions);
System.out.println("Definitions per page: " + definitions/pages);
}
}
10
public class Words {
public static void main(String[] args) { Dictionary webster= new Dictionary (1500, 52500);
webster.pageMessage();
webster.definitionMessage();
}
}
11
4.1.2 子类的构造方法
•若子类中没有构造方法,则执行父类中的无参构造方法;
•若子类定义了构造方法,则在创建新对象时,先执行父类的无参数构造方法,再执行自己的构造方法
•对于父类中含有参数的构造方法,子类可以在自己的构造方法中应用super 调用它。
12
public class Book{
……
public void pageMessage()
{
System.out.println("Number of pages: " + pages);
}
}
public class Dictionary extends Book{
……
public void pageMessage()
{
super.pageMessage();
System.out.println("Number of definitions: " + definitions);
}
}
13
4.1.3 类对象之间的类型转换 若将子类对象赋给父类对象,则可以用显
式或隐式实现,即可以直接将子类对象直
接赋给父类对象;
若将父类对象赋给子类对象,则必须使用
显式转换,即强制类型转换。
形参是父类对象,子类对象可为实参
14
class Person
{
private String name;
private int age;
public Person(String name,int age)
{
=name;
this.age=age;
}
public void sayHello(Person another)
{
System.out.println("Hello"+ + " ! "+
" my name is "+ name);
}
}
15
class Student extends Person
{
private String school;
public Student(String name,int age,String school)
{super(name,age);
this.school=school;
}
}
class Teacher extends Person
{
private String department;
public Teacher(String name,int age,String department)
{super(name,age);
this.department=department;
}
}
16