继承性
- extends继承 Java支持单继承,子类得到父类的成员变量和成员方法,(但不包括静态方法和构造方法)。
在子类的构造函数中必须用super()调用父类的构造方法
关联:函数的复写(override),覆盖。Super()与this的用法。
abstract抽象 抽象类中可有抽象函数和成员函数,抽象类天生做爹的,即为可被继承的类。
抽象类&抽象函数
1.抽象类不能生成对象。
2.抽象类中可以没有抽象函数。
3.抽象类中的构造函数在子类中用super()调用。
4.抽象函数必须声明在抽象类中。
5.抽象函数abstract void fun();
只有函数定义无方法体,如在子类中没有进行复写(override),会进行报错。
为什么使用抽象类?
如果一段代码在语义上有错误,那么在语法上也应该是有错误的。(在努力实现的)。
-
interface& implements接口就是定义了一种标准,体现了面向对象的精髓是面向对象的核心。
1.定义了接口就是定义了调用对象的标准。
2.接口是一种特殊的抽象类,所有的方法均默认为public,且均为抽象方法。
3.接口支持多继承,一个类可以实现多个接口。Eg:interface A{…}
interface B{…}
class implements A, B{…}
设计模式之工厂方法模式
有两个子类HPPrinter&CannonPrinter继承接口Printer。在test类中实现那个打印机。
class test{
public static void main(String args[]){
Printer printer = null;
int flag = 1;
if(flag == 0){
printer = new HPPrinter();
}
else if(flag == 1){
printer = new CannonPrinter();
}
printer.open();
printer.print("test");
printer.close();
}
}
问:若新增一个同方打印机,在test类中需重新增加循环语句,将同方类的对象赋值给Printer的引用printer。重复代码过多,如何解决???
//主要代码功能:根据用户选择(根据用户选择是参数)生成打印机的对象,并向上转型为打印机类型(类型为打印机类型)。
//printer getPrinter(int flag);
class PrintFactory{
public static printer getPrinter(int flag){
Printer printer = null;
int flag = 1;
if(flag == 0){
printer = new HPPrinter();
}
else if(flag == 1){
printer = new CannonPrinter();
}
return printer;
}
}
生成HP Cannon两个类的对象时,不是直接new()而是把生成这两个对象的代码直接封装在PrintFactory类中的getPrinter()方法中,当我们使用时直接在test类中直接调用getPrinter();
public static void main(String args[]){
int flag = 1;
Printer printer = PrintFactory.getPrinter(flag);
printer.open();
printer.close();
}
封装性
- 包与访问权限
打包package com.baidu
导入包import java.io.*
private(私有) | 本类 | |||
---|---|---|---|---|
default(默认) | 本类 | 当前包中 | ||
protect(只能修饰成员变量和成员函数) | 本类 | 当前包 | 其他包类(只有两个类有extends关系时,允许跨包访问) | |
public | 本类 | 当前包 | 其他包子类 | 所有类 |
修饰符为public时,类名与源文件必须同名。
如果子类&父类不在同一包中,则不可以继承其default权限下的成员变量和成员函数。
多态性
- 对象的转型[多态性的一种体现]
1.对象的向上转型:将子类对象赋值给父类的引用
Student S = new Student(); Person P = S;
也可写为:Person P = new Student();
一个引用能调用那些成员变量和成员方法,取决于引用的类型。
一个引用具体调用哪个成员方法,取决于引用所指的对象
2.对象的向下转型:父类对象赋值给子类的引用
Person P = new Person(); Student S =(Student)P;
联想:强制类型转换
end
�