1.面向对象的特性
抽象、封装、继承、多态
2.继承
2.1理解继承的概念
子类可以继承父类的非private类成员,可以直接调用父类的非私有成员,对于私有成员则需要利用父类中非私有成员实现间接调用。
子类允许对分类的方法进行重写(不影响父类原方法)
优点:可重用、提高代码效率、易维护
2.2实现类的继承(extends)
[访问修饰符] [修饰符] class 子类名 extends 父类名
2.3子类实例化过程
- 加载父类,完成父类的静态变量和静态编码快,按照代码顺序执行;
- 加载子类,完成子类的静态变量和静态编码快,按照代码顺序执行;
- 初始化父类的非静态成员;
- 执行父类的构造方法;
- 初始化子类的非静态成员;
- 执行子类的构造方法。
2.4方法的重写
子类创建与父类具有同名(返回类型和参数列表均一致)的方法但不同功能实现不同业务的方法。
2.5父类引用指向子类实例
父类名 父类类型的变量 = new 子类名();
子类中的成员具有高使用优先级。
2.6 super关键字
在子类内部直接调用父类的成员(与this关键字相近)。
//专业类 abstract class Courses { public abstract void getCourses(String[] courses); } //计算机专业课程类 class ComputerMajor extends Courses{ //重写getCourses方法 public void getCourses(String[] courses) { System.out.print("计算机专业的课程有:"); for (String cou:courses) { System.out.print(cou + " "); } } } //会计专业课程类 class AccountingMajor extends Courses{ //重写getCourses方法 public void getCourses(String[] courses) { System.out.print("会计专业的课程有:"); for (String cou:courses) { System.out.print(cou + " "); } } } //程序主类 public class Demo7_1 { public static void main(String[] args) { Courses cou1 = new ComputerMajor(); String[] str1 = {"计算机基础", "操作系统", "计算机网络"}; cou1.getCourses(str1); System.out.println(); Courses cou2 = new AccountingMajor(); String[] str2 = {"会计基础", "会计电算话", "法学"}; cou2.getCourses(str2); } }
3.抽象类和接口
抽象类的方法允许只有声明而无具体的实现,专门用于继承,接口的所有方法只有方法声明,利用接口可以实现多继承的效果。
3.1抽象类和抽象方法
抽象类不可以被实例化,但可以用来声明变量(不可以用new创建实例),但可以声明变量;
利用abstract指明需要被重写的方法;
抽象方法只有声明而无方法体(大括号部分),必须在自类中被重写,若未重写,则需要被声明为抽象类;
构造方法和静态方法不能用abstract来修饰;
允许有非私有成员。
(有声明和空的方法、有声明无方法)
3.2接口的概念(public static final)
不能被创建实例,类中所有方法均为抽象方法,默认public类型,实现接口的非抽象类必须实现接口中的所有方法,抽象类则可以不要全部实现,类允许有多个接口。
3.3接口的创建和实现
[修饰符] interface 接口名 [extends 接口列表]{ [public] [static] [final] 变量名; //属性默认修饰 [public] [abstract] 方法名; //方法默认修饰 }
3.4接口的实现
class 类名 [extends 父类名] [implements 接口列表]
3.5接口的继承
接口允许继承,并且可以多重继承接口。
interface 接口名 NewInterface extends OldInterface{ //具体接口 }
3.6接口和抽象类的区别
抽象类是对事物的抽象,而接口则是对动作行为的抽象,前者只能单继承,后者可以多继承。
4多态
4.1什么是多态
同一个操作作用在不同的对象上会有不同的回应,从而产生不同的效果。
静态多态---重载
动态多态---继承、重写、父类指向子类
4.2多态的优势---代码扩充性增加、增加灵活性、增加效率、增加简化性
5.内部类
(类的内部定义的类:成员内部类、静态内部类、方法内部类和匿名内部类)
5.1内部类特性
访问修饰符增加了protected和private,内部类可以不创建实例而范围外部类,同名的成员内部类具有更高的优先级,内部类不可以定义静态变量。
5.2成员内部类(内部类可直接访问外部类成员。外部类不可直接访问内部类成员)
public class outerclass{ [范围内修饰符] class innerclass{ } }