面向过程 & 面向对象
思想
面向过程:将一件事情步骤化(只适合处理较为简单的问题)
面向对象:思考问题会将问题进行分类,再对分类进行单独思考。最后才会对某个分类下的细节进行面向过程的思索(更适合处理大型复杂问题,适合处理多人协作的问题)
面向对象编程的本质:以类的方式组织代码,以对象的封装数据
抽象
三大特性
封装
高内聚/低耦合:类的内部数据操作细节自己完成,不允许外部干涉/仅暴露少量的方法给外部使用
封装:应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏
属性私有:get/set
private 访问关键字来实现封装
继承
派生:在继承了一些东西基础上增添新的东西
Java类只有单继承,没有多继承(只有接口有多继承)
子类继承父类,关键字extands来表示
子类和父类之间,从意义上讲具有“is a”的关系
Object 是所有类的基类
super
super注意点
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
vs this - this:指本身调用者这个对象
- super:父类的引用
- this没有继承也可以使用
- super有继承才可使用
构造方法
- this 本类的构造
- super 父类的构造
方法的重写
重写只能public 父类与子类
重写:需要继承的关系 子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符,范围可以扩大不能缩小 public>protected>Default>private
4.抛出的异常,范围,可以被缩小,但不能扩大 classNotFundException -> Exception
重写:子类和父类的方法必须一直,方法体不同
1.父类的功能子类不一定需要 或者不一定满足
多态
同一个方法根据发送对象的不同采用多种不同的行为方式
一个对象的实际类型是确定的,但可以指向对象的引用的类型很多
Person p = new Student(); //向上提型
Student p1 = new Student();
多态存在的条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
注意:多态是方法的多态,属性没有多态性.
static方法:属于类,不属于实例
final 常量 没有继承
private 方法 私有 不能继承
instanceof (类型转换-引用类型)
//(子类)父类
Person p1 = new Student();
Student p2 = (Student)Person;
- 将 子类转换为父类 向上转型(会丢失子类特有属性和方法)
- 把父类转换为子类 向上转型 强制转换
- 方便方法的调用,减少重复的代码
抽象类
abstract修饰符来修饰类/方法
只有约束没有实现
抽象出来,提高开发效率
- 不能new这个抽象类 只能靠子类去实现它:约束
- 抽象类中可以写普通方法
- 抽象的方法必须在抽象类中
public abstract class Action {
public abstract void do();
}
创建与初始化对象
public class Studen {
//属性
String name; //null 抽象的类属性 最好不要赋值
int age; //0
final String name2; //
//方法
public static void main(String[] args){
//**创建一个实例对象**
Student stu = new Sudent();
}
}
构造器
- 每个类都有一个隐式构造器
- 必须没有返回类型,也不能也void
3.作用:1.用于初始化属性 2.new 本质在调用构造方法
4.注意:定义有参构造器之后 如果还想用无参构造,显示定义一个无参的构造
**无参构造**
public class Student {
String name;
public Student(){
//初始化属性
this.name = "张三";
}
}
**有参构造**
public class Student {
String name;
public Student(type var){
//初始化属性
this.name = "张三";
}
}
访问关键字
访问关键字
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其它包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N(说明) | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
接口的默认访问权限为public
对象的内存
接口
作用
1.定义约束,方法让不同人实现
2.方法 public abstract
3.属性 public static final 常量
4.接口不能被实例化 接口没有构造方法
5.implements可以实现多个接口继承(伪继承)
6.实现接口的类必须重写接口的方法
请添加图片描述
N中内部类
成员内部类
可以获取外部类的私有属性