面向对象
面向对象 {}作用域
- 万物皆对象
类 蓝图 模板 类型他
对象 实例
类是引用类型,栈中存地址,堆中存数据
成员变量(全局变量)>成员变量
构造函数
作用:创建对象
public Dog(){}
隐式构造
如果你这个类没有写构造,编译器会自动提供;写了就不会
this
this.当前对象:调用构造函数和类属性(谁调的方法,谁就是当前对象)
public Student(){this.name=name;}调用构造时,这个this就是new Student("")时开辟空间的位置
student.add();调用add方法时,将当前对象student的地址放入方法栈底(第0个位置,就是this)
this就是指针指向第0个位置
jvm规定↓
方法栈第一个就是this,代表当前对象地址(指针)
super
调用父类的构造 默认调用无参(指针)
先执行父类的构造函数,在执行子类的构造函数
构造函数 (没写有参,自送无参)
super.show();
super.name;调用从父类继承过来的方法和属性
super(a,b)
执行父类构造的时候,构造的是子类,而不是父类对象
权限修饰符
public
protected子类或同包中
默认同包中
private自己
特点:
方法名必须和类名一致
必须没有返回值类型
对象创建过程
new 对象
开辟空间
为各种属性符初值
执行构造方法中的代码
将对象的地址赋给变量
封装
为什么
为了保证数据的安全
怎么做
先把属性私有化--
提供公有的方法
private 私有的,在自己类中使用
继承
代码复用
is a
final修饰的类 不可继承类
多态 (继承+重写)基于动态绑定
基础:父类类型指向子类对象,父类执行子类方法
方法重写
子类继承了父类的方法,如果子类觉得这个方法并不适用,就可以重写。
方法重写的规则
1.修饰符
访问权限可以放大
私有的方法不存在重写
实际用:Object clone()--protected--public
2.返回类型
返回值类型一致或者是其子类
3.方法名相同
4.参数相同
方法重载
返回值和参数类型和个数不同
多态基础:父类类型指向子类对象
子类重写父类的方法,父类调用子类的方法
父类 对项名 = new 子类();
对象名.方法();
编译看=左边,运行看=右边。
对象能点出什么方法看父类类型,执行什么方法看子类类型
向上转型和向下转型
子类对象转为父类类型 --- 向上 ---自动
父类对象转为子类类型 --- 向下 ---强转
Instanceof 判断类型 须有父子关系
抽象(设计与实现分离~多态)
抽象类
- 抽象类不能实例化,但可以有自己的构造方法,只能实例化其子类。
- 抽象类里可以有抽象方法
抽象方法
- 抽象方法没有实现,没有方法
- 抽象方法只能放在抽象类中(×),还有接口中。抽象方法所在的类一定是抽象类。
- 父类的抽象方法必须被非抽象子类实现。
接口(设计与实现分离,多实现,多继承)
构造方法的作用是 “构造对象” 和 “初始化对象的属性”。
接口无法实例化,属性有为常量,所以不能
属性隐式使用 public final static
方法隐式使用 public abstract
- 接口表示一种规范-----方法
- 接口表示一种能力-----方法
- 接口表示一种标记----标记接口Cloneable,Serializeable
接口 has---a 有什么,实现什么 一般为动词
继承 is-----a 是什么,继承什么 一般为 名词
回调(先有接口使用者,后有 实现者)
接口回调
回调原理
1.可以先抽象一个类,
2.在类里面创建抽象方法,
3.然后用普通方法调用
4.在主方法定义抽象类
5.调用里面的普通方法
当需要用时
6.实现抽象类,实现抽象方法,就可以直接运行。
//1
public abstract AbsAdd{
//2
public abstract void absAdd();
//3
public void add(){
absAdd();
}
}
//4
public class Main{
public static void main(String[] args){
//5
AbsAdd add;
add.add();
}
}
//6
public class Test implements AbsAdd{
public abstract void absAdd(){
System.out.println("接口回调");
}
}
内部类
成员内部类
成员内部类
静态内部类中调用非静态属性
new一个对象(每次新建一个对象)
传入一个对象(当前对象)
局部内部类
局部内部类
方法里面定义类
局部内部类用局部变量会自动换为常量
局部内部类用局部变量需用临时变量赋值用
匿名内部类
直接new 接口,抽象类,
jdk1.8
接口添加
静态方法
默认方法
无继承,实现两个接口时,若两个接口都有一样的默认方法,则会接口冲突。继承类时,方法一样则类优先。
static 存在全局区
静态的只能使用静态的
静态的可以跳过创建类(new),直接调用里面的方法
静态的属性或方法在内存中只有一份
可以通过类名直接访问,也可以通过对象访问
静态的属性属于类
静态的东西优先加载->不能调用非静态
静态方法不能使用this,super
静态的方法不能重写->不存在多态
final
修饰类表示类不能被继承
修饰方法表示不能被重写,可以被继承
final修饰属性(局部变量)表示常量
如果是局部变量,那在使用前赋值就好了
如果是非静态成员变量,可以在构造方法中赋值
如果是静态成员变量,可以在静态代码块中赋值
静态绑定:编译时就知道传入的类型(如方法的重载)
动态绑定:运行时不知道传入的类型(多态)
指令重排 最终一致性
设计模式
开闭原则:
对扩展开放,对修改关闭。尽量不修改原来的代码
单例模式(8种方式)
单例- 单个实例 这个类只能有一个对象
懒汉模式的单例(只能单线程使用)
//静态的只能使用静态的
//静态的可以跳过创建类(new),直接调用里面的方法
public class Student{
private String name;
private static Student s;
public static Student getInstance(){
if(s==null){
s=new Student();
return s;
}else{
return s;
}
}
}
导成jar包
file->export->java->JAR file->next->finish
使用:复制到项目下,一般建lib文件夹放入->Build path->add to Build path

浙公网安备 33010602011771号