-
什么是面向对象?
- 以类的形式组织代码,以对象的形式封装数据
构造器详解
-
和类名相同,无返回值
-
默认有一个无参构造器
-
new本质调用构造方法,初始化对象的值
-
有参构造:
public class Person{ String name; // 一旦定义了有参构造,无参构造必须显示定义 public Person(){} public Person(String name){ this.name = name; // this.name代类的name,构造器中name代表所传参数 } }
封装
- 高内聚,低耦合
- 属性私有,get/set(字段不能是共有的,否则客户端会随意修改。使用get set方法替换共有字段)
public class Student{
// 属性私有
private String name;
// get/set方法
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
}
- 提高程序的安全性,可维护性
- 隐藏方法实现细节,统一接口
继承
-
本质是对某一批类的抽象
-
super注意:
- super调用父类的构造方法,必须在构造方法的第一个
- super只能出现在子类的方法或构造方法中
- super和this不能同时调用构造方法
- 默认调用父类的无参构造
-
重写:子类重写父类的方法
- 非静态方法
- 方法名、参数列表必须相同
- 修饰符范围可以扩大但不能缩小
- 异常的范围可以缩小但不能扩大
重写:子类和父类的方法必须一致,方法体不同。
重载:同一个类中方法名相同,参数列表不同。
多态
-
多态是方法的多态
-
父类和子类有联系。类型转换异常:ClassCastException
-
存在条件:继承关系;方法需要重写;父类引用指向子类对象
// 能调用的方法都是自己或者父类的 Student s1 = new Student(); // 父类调用子类的对象,不能调用子类独有的方法 Person s2 = new Student(); // 对象能执行哪些方法,主要看左侧的类型,无关右边new的类型
-
static:
- static方法在加载类的时候就加载了,先于其他方法
public class Person{ // 2:赋初值 { System.out.println("匿名代码块"); } // 1:只执行一次 static{ System.out.println("静态代码块"); } // 3 public Person(){ System.out.println("构造方法"); } } 输出结果: 静态代码块 匿名代码块 构造方法
抽象类(is-a)
- 子类继承了抽象类,要实现抽象类的所有抽象方法
- 抽象类不能被实例化,不能new一个抽象类,只能子类来实现
- 抽象类可以写普通方法
- 抽象方法必须在抽象类中
接口 Interface(like-a)
- 只有规范(抽象方法),没有方法,不能被实例化
- 接口中所有定义的方法都是抽象的。 public abstract
- 接口中所有定义的常量都是抽象的。 public static final
- 具体的方法在接口的实现类中完成。实现了类的接口,需要重写接口中的方法