一、对象

二、类
1、什么是类?
类:汽车设计图纸
对象:设计图纸制造出来的汽车
- 类与对象的关系

2、类的定义

3、创建对象

- 实例变量与局部变量的区别

4、构造方法
作用:生成对象,并对对象的实例变量进行初始化(类似于python的 def init(self):)
特点:名字必须与类名相同且没有任何返回值、可以有多个构造方法

5、this关键字
- 用法一:调用实例属性/实例方法:this.name、this.sayHi

- 用法二:调用构造方法,简化新的构造方法

三、面向对象的三大特性之封装

1、作用
段落引用尽可能隐藏对象的内部实现细节,控制对象的修改及访问权限。
2、使用
对象调用age变量,赋值为100000,语法上没问题,但是不合逻辑,为了避免这种情况,则使用封装,对变量进行限制
// 第一步:将变量设置为私有(private)
private int age;
// 第二步:设置get、set方法并过滤有效数据
public int getAge(){
return this.age;
}
public void setAge(int age){
// 过滤有效数据
if (age=<160 && age>=0){
this.age = age;
}else{
this.age = 18;
}
}
四、面向对象的三大特性之继承

1、继承的使用及特点
-
语法
class 子类 extends 父类{} -
应用
产生继承关系后,子类可以使用父类中的属性和方法,也可定义子类独有的属性和方法 -
优点
既提高了代码的复用性,又保证了代码的可扩展性 -
特点
java为单继承,一个类只能有一个直接父类,但是可以多级继承,属性方法逐级叠加 -
不能被继承
1、构造方法不能继承
2、private修饰的属性和方法不能被继承
3、父子类不在同一个包内,default修饰的属性和方法也不能被继承
2、访问修饰符

3、方法的重载与重写
- 重载
重载(overload):在一个类中,方法名一样,参数不一样 - 重写
重写(override):子类中重新写一个与父类一样的方法
【需求】继承的父类的方法不能满足需求,则子类可以对父类该方法重写
【要求】:方法名、参数列表、返回值类型必须与父类一致,访问修饰符不能比父类严格
4、子类对象创建的过程
创建子类对象时,先会构建父类对象,再由父类共性内容,叠加子类独有内容,组合成完整的子类对象。
5、super关键字
- super关键字用法
【用法一】:在子类中,调用父类方法/变量
父类的方法被子类重写了,还想调用父类方法,则可以使用super.来调用。
子类调用父类的东西(变量/方法),用supper.调用
【用法二】:在子类构造方法中,调用父类有参/无参构造方法
在子类构造方法中第一行默认隐藏存在super()方法,意为默认调用父类无参构造
也可以自定义使用super(arg1, arg2)方法,引用父类的带参构造。
- this与super
this 调用本类(包括继承的)的属性、方法、本类的构造方法
super 调用父类的属性、方法、构造方法
不能同时使用。
五、面向对象的三大特性之多态
1、什么是多态
二者有直接/间接继承关系时,父类引用指向子类对象,从而产生多态
Animal animal = new Dog(); // 父类引用指向子类对象
解释:1、逻辑上讲,dog is a animal 2、语法上讲,自动类型转换
2、特点
Animal animal = new Dog(); // 父类引用指向子类对象
之后,
只能调用父类属性/方法,
如果子类重写了父类方法,调用的即是子类的重写方法
作用:屏蔽子类间的差异,灵活、耦合度(模块间关联度)低
3、多态的应用
- 【场景一】:使用父类作为方法的形参实现多态,shi’de方法的类型更加宽泛(传入类型更宽泛)

- 【场景二】:使用父类作为方法返回值实现多态,是方法可以返回不同子类对象(返回类型更宽泛)。

4、类型转换
Animal animal = new Dog(); // 父类引用指向子类对象
之后,animal就无法调用子类特有的方法了,
所以,需要类型转换
- 向上转型(装箱)
Animal animal = new Dog(); // 父类引用指向子类对象(装箱)
- 向下转型(拆箱)
Animal animal = new Dog(); // 父类引用指向子类对象(需要先向上转型,才能向下转型)
Dog dog = (Dog)a; // 拆箱
- instanceof关键字
// 向下转型之前,需要判断引用中的对象真是类型,保证类型转换的正确性
Animal animal = new Dog();
if(animal instanceof Dog){
Dog dog = (Dog) animal;
dog.eat();
}else if(animal instanceof Cat) {
Cat cat = (Cat) animal;
cat.eat();
}
六、三个修饰符
1、abstract
- 抽象类
当各个子类调用父类的某个方法时,都需要重写,那就把父类该方法抽象化,那么,该父类就要变成抽象类了。
abstract关键字修饰的类,叫抽象类
此类不能new对象。
包含抽象方法的一定是抽象类,但是抽象类中可以有抽象方法,也可以有非抽象方法
- 抽象类作用
1、可以被子类继承,提供共性属性和方法
2、可声明引用,更自然的使用多态
- 抽象方法
段落引用abstract关键字修饰的方法,叫抽象方法。(必须在抽象类中)
// 抽象方法只有方法声明,没有方法实现
public abstract void eat();
非抽象子类必须重写抽象父类的所有的抽象方法
2、static
- 静态属性(类属性)
【定义】
// 静态属性属于整个类共有的属性
static int count;
【调用】
类名.静态变量
【修改】
静态属性属于整个类共同持有的共享空间(一份),任何对象修改,都会影响其他对象。
【应用】
定义一个静态变量,可以统计该类被创建的次数。(创建的时候,调用该变量+1)
实例属性

静态属性

- 静态方法

【特点】
静态方法只能直接访问静态成员,不能直接访问非静态成员。
静态方法中不能使用this super关键字。
静态方法可以继承,不能重写、没有多态。
- 静态代码块

【什么时候触发类的加载?】
创建对象、创建子类对象、访问静态方法/属性、主动加载
也就是说,第一次执行上面操作,会执行静态代码块,再次执行就不会再执行静态代码块
3、final
最后的,不可更改的。
- final可以修饰的内容
【final类】
final修饰类:此类不能被继承
String、Math、System均为final修饰的类,不能被继承
【final方法】
final修饰方法:此方法不能被重写,但是可以被继承
【final变量】
final修饰变量:此变量不能被改变(常量)
- 常量(无初始值,只允许赋值一次)
【局部常量】:显示初始化
finall修饰局部变量
【实例常量】:显示初始化,构造方法
finall修饰实例变量
1、实例常量不提供默认值,必须手动赋值
2、赋值时机:显示初始化、构造方法
3、如果在构造方法里面给常量赋值,那么,所有的构造方法都需要正确赋值
final String brand;
public Car(){this.brand="宝马”};
public Car(String brand){this.brand=brand};
【静态常量】:显示初始化、静态代码块
finall修饰静态变量
1、静态常量不提供默认值,必须手动赋值
2、赋值时机:显示初始化、静态代码块
final static String ADDRESS;
static{
ADDRESS = “中国”;
}
【对象常量】:基本类型值不可变,引用类型地址不变
final int nam = 100; // final 修饰基本类型,值不变
// final修饰引用了型,地址是不可变的,但是值可以变
final int[] nums = new int[]{11, 22, 33}; // 数组元素个数不能再改变,但是元素值可以改变
finall Student s = new Student(); // s这个对象不能再初始化了,但是s对象中的属性都可以改
七、接口
1、什么是接口

接口相当于特殊的抽象类。
【微观】:接口是一种能力。
【宏观】:接口是一种标准。
接口中的方法是能力的具体要求。
- 接口的语法及特点

// 由于只能静态常量和抽象方法,所以,前面的后缀都可以不写,默认。
interface MyInterface{
String FIELD = “value”;
void method();
}
- 接口的使用
// 接口不能被创建对象,但是类可以实现接口
public class Impl implements MyInterfacel{
// 类中要实现接口中所有抽象方法
}
-
接口的作用
Java 为单继承,当父类的方法种类无法满足子类需求时,可以实现接口扩充子类能力。
接口支持多实现,可为类扩充多种能力。 -
接口的好处
程序耦合度低
更自然的使用多态
设计与实现完全分离
更容易搭建程序框架
更容易更换具体实现
2、接口与类的异同

3、接口的多态
【接口的多态】
实现之后,接口就相当于一个父类,可以父类变量指向子类对象(多态)。
和被继承的父类一样,使用多态后,父类(接口)变量只能调用接口中的方法,要想调用实现类(子类)独有的方法,需要强转回实现类本身类型。

4、常见关系





