前言:赶进度ing。。。。。。。。。。。。。。。。。。。。。。。。
面向对象编程的三大特征
面向对象三大基本特性:封装、继承、多态
继承
public class 子类名 extends 父类名{}
父类:也被称为基类、超类
子类:也被称为派生类
子类具有父类的属性和方法,还可以在子类中重新定义、追加属性和方法
继承:
优点:提高代码复用性、维护性
缺点:让类与类之间产生了关系,类的耦合性增加了,削弱了子类独立性
定义了一个类,没有继承任何父类,在默认情况下,就继承了Object类(任何类的祖宗)。
在子类方法中访问一个变量:
局部变量 → 当前类中成员属性 → 父类中 → 报错
没有
this.age 当前子类age
super.age 当前子类的父类age
age 当前方法中局部变量age
new 对象类(); 补全 ctrl+alt+v
子类的所有构造函数都会默认访问父类中的无参构造方法,如果父类中没有无参构造方法,必须在子类构造函数第一条加入父类的有参构造函数。
this(); 和 super(); 必须写在构造函数第一条
封装
如何实现封装:
1.修改属性权限为private(私有)
2.创建getter/setter方法 (设为public(用于属性的读写))
3.在getter/setter方法中加入属性控制语句。(验证参数合法性)
封装的规则:
1.将类的某些信息隐藏在类的内部,不允许外部的程序直接访问。
2.通过该类提供的方法来实现对隐藏信息的操作和访问。
权限修饰符的具体权限
权限修饰符 | 同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 |
private(私有) | √ | × | × | × |
default(默认) | √ | √ | × | × |
protected(受保护的) | √ | √ | √ | × |
public(公开) | √ | √ | √ | √ |
方法重写注意事项:
1.私有方法不能被重写,父类中私有方法,子类不能继承。
2.子类方法访问权限不能比父类低(public>protected>default>private)
继承注意事项:
1.java中类支持单继承,不支持多继承(一个子类不能有两个父类)
2.java支持多层继承
tips:
package:
1.就是文件夹
2.作用:对类进行分类管理
3.相同package下类名称不可以重复。
状态修饰符:
1.final(最终态):
final关键字,修饰我们的类(无法继承)、成员属性(相当于定义了一个常量,必须先赋值,无法修
改)、成员方法(无法重写)
2.static(静态):
static关键字,被类的所有对象共享访问
静态变量访问特点: 直接通过类名. 而不是对象名。
public class Student(){
public static school =null;
}
Student stu = new Student();
Student.shool = "Tsing university"; √
stu.shool = "Tsing university"; ×
静态方法中:
1.可以访问静态成员方法,但不能直接访问到非静态方法,
2.可以访问静态成员属性,但不能直接访问到非静态成员属性。
非静态方法:
可以访问静态成员方法和静态成员属性,也可以访问非静态方法和非静态成员属性
static关键字用途:
①方便在没有创建对象的情况下调用(方法、变量),不依赖对象来访问,只要类被加载,就可以通过类名去访问
②Constant(常量):常量名称全大写。
例子:定义常量(不可变) public static final int CODE_200 = 200;
多态
多态:
定义:同个对象,在不同时刻表现出来的不同形态。
基本条件:
1.继承或实现(接口概念)的关系
2.方法的重写(必须父类与子类有相同的方法)
3.有父类的引用指向子类
访问特点:
1.成员变量:编译看左边,执行看左边
2.成员方法:编译看左边,执行看右边
(编译时父类中必须能找到该成员变量和成员方法)
左边 右边
Parent p = new Child();
优缺点:
1.好处:提高了程序的扩展性
2.坏处:不能使用子类的特有功能
多态的转型:
1.向上转型: Animal dog = new Dog();
从子到父,父类引用指向子类对象
2.向下转型: Dog dog2 = (Dog)Animal();
从父到子,父类引用转向子类对象(父强转子)