Day05\06\07:面向对象
-
本质:以类的方式组织代码,以对象的组织(封装)数据。
三大特性:
-
封装
-
继承
-
多态
-
类
-
属性
-
方法
构造器
-
一个类即使什么都不写,它也会存在一个方法
-
使用new关键字,本质是在调用 构造器。用来初始化值
-
有参构造:一旦定义了有参构造,无参就必须显示定义
//alt+insert 快捷键 定义一个有参构造
构造器。就是类自带的方法,可以在里面初始化类的对象。
-
和类名相同
-
没有返回值
-
this. 指向当前类
简单小洁类与对象
-
类与对象
类是一个模板:抽象、对象是一个具体的实例
-
方法
定义、调用
-
对象的引用
引用类型: 基本类型
对象是通过引用来操作的:栈--->堆
-
属性:字段Field 成员变量
默认初始化。
-
对象的创建和使用
-
必须使用new关键字创造对象,构造器
Person kuangshen =new Person();
-
对象的属性 kuangshen.name
-
对象的方法 kuangshen.sleep()
-
类:
静态的属性 属性
动态的行为 方法
封装
该露的露,该藏的藏
高内聚,低耦合。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
封装(数据的隐藏):
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
属性私有,要想用就get/set方法。
作用:
-
提高程序的安全性,保护数据
-
隐藏代码的实现细节
-
统一接口
-
系统可维护增加了
继承
父类 子类 派生类。
类和类之间还有 依赖 组合 聚合等关系
object类
祖宗类,所有类都继承这个类
super
子类访问父类的途径
私有的东西无法被继承
-
super调用父类的构造方法,必须在构造方法的第一个
-
super必须只能出现在子类的方法或构造方法中
-
super和this不能同时调用构造方法。
vs this:
代表对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
前提:
this:没有继承也可以使用
super:只能在继承条件才可以使用
方法重写
需要有继承关系,子类重写父类的方法!
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大,不能缩小。 public->protected->default->private
-
抛出的异常:范围可以被缩小,但不能扩大。
为什么需要重写
-
子类不一定需要父类的功能,或者不一定满足父类的功能。
Alt+Inesert: override。
多态
-
多态是方法的多态,属性没有多态
-
父类和子类,有联系 类型转换异常
-
存在条件:继承关系,方法需要重写
不能重写的方法
-
static 方法,属于类,不属于实例
-
final 无法改变
-
private方法。
instanceof
Java的保留关键字。
作用:测试它左边的对象是否是它右边的类的实例,返回boolean的数据类型。
static
隶属于类,类中所有成员共享,只有一个值。
最先执行static ,只执行一次。
抽象类 abstract
-
不能new这个抽象类,只能靠子类去实现它,约束!
-
抽象类中可以写普通的方法
-
抽象方法必须在抽象类中
接口 更高级的抽象
interface
接口中不能出现字段。只表示一个接口类型和一组方法签名。
interface Person{
void run();
int age();
}
class Student implements Person{
@Override
public void run(){
}
@override
public int age(){
}
}对比 abstract class interface 继承 只能extends一个class 可以implements多个interface 字段 可以定义实例字段 不能定义实例字段 抽象方法 可以定义抽象方法 可以定义抽象方法 非抽象方法 可以定义非抽象方法 可以定义default方法 接口继承
一个interface可以继承另一个interface。相当于扩展了接口的方法。
defaul方法
-
default方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。
静态字段和静态方法
对于实例字段,每个实例字段有自己的空间,
而静态字段共享空间。
注意:不推荐用实例变量.静态字段去访问静态字段,推荐使用类名.静态字段。
其实实例变量是没有静态字段的,只是在使用实例变量.静态字段时,系统自动转化成类名.静态字段。
调用实例方法必须通过一个实例变量,而调用静态方法则不需要实例变量,通过类名就可以调用。类似于C语言中的函数。
接口的静态字段
public interface Person {
public static final int MALE = 1;
public static final int FEMALE = 2;
}
interface定义一个静态字段,必须是public static final
所以在定义时,可以省略public static final,系统编译器会自动添加。
作用域
public :可以被所有的访问,但是当字段和方法被访问时,要考虑到class是否能访问
private :无法直接访问,可以通过set get方法访问。 被限定在类的内部,可以被嵌套类访问。
protected: 作用于继承关系。定义为protected的字段和方法可以被子类访问,以及子类的子类。
package: 包作用域:指一个类允许访问同一个包里没有public、private修饰的class,以及没有public、private、protected修饰的字段和方法。
注意:包没有父子关系。
局部变量: 在方法内部定义的变量。
final:用final修饰class可以阻止被继承。
修饰method可以阻止被子类覆写。
修饰field可以阻止被重新赋值。
内部类
一个类定义在一个类的内部。
它与普通类有个最大的不同,就是Inner Class的实例不能单独存在,必须依附于一个Outer Class的实例。
classpath和jar包

浙公网安备 33010602011771号