面向对象
面向对象编程的本质就是:以类的方式组织代码,以对象形式封装数据。
三大特征:封装,继承,多态 。
对象,是具体的事物。类,是抽象的,是对对象的抽象。
类:是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。
访问修饰符 类关键字 类名{}
对象:是抽象概念的具体实例。
创建与初始化对象
-
使用new关键字创建对象
-
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化 以及 类中构造器的调用。
-
类中的构造器也称构造方法,是进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
1. 必须和类的名字相同
2. 必须没有返回类型,也不能写void
封装
- 我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部处理。
- 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
- 属性私有,get/set。
/**
* 封装:
* 高内聚,低耦合:类的内部数据操作细节自己完成,不允许外部干涉;仅暴露少量的方法给外部处理
* 封装优点:
* 1.提高程序的安全性,保护数据。
* 2.隐藏代码的实现细节。
* 3.统一接口。
* 4.系统可维护增加了。
* private:私有
*/
public class Student {
//private:属性私有
private String name;//姓名
private int age;//年龄
private char sex;//性别
//get/set:提供一些可以操作这些属性的方法
//提供一些public的get/set方法
//get获得这些属性
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public char getSex(){
return this.sex;
}
//set给这些属性赋值
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public void setSex(char sex){
this.sex=sex;
}
}
import com.kuang.oop.demo03.Student;
/**
* 一个类中最好只有一个mian方法
*/
public class Application {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("董乐乐");
s1.setAge(21);
s1.setSex('男');
System.out.println(s1.getName());
System.out.println(s1.getAge());
System.out.println(s1.getSex());
}
}
继承
- 继承是类和类之间的一种关系。
- 继承关系的两个类,一个为父类(基类),一个为子类(派生类)。子类继承父类,使用关键字extends来表示。
- 子类和父类之间,从意义上应该具有“is a”的关系。
- 子类继承父类就会拥有父类的全部方法。
super
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
this VS super
代表的对象不用:
this:本身调用者这个对象
super:代表父类对象的应用
前提:
this:没有继承也可以使用
super:只能在继承条件下才可以使用
构造方法:
this():本来的构造
super():父类的构造
重写
需要有继承关系,子类重写父类的方法,执行子类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小 public>protected>default>private
- 抛出的异常:范围可以被缩小,但不能扩大
重写:子类的方法必须和父类一致,方法体不同。
为什么需要重写:
- 父类的功能,子类不一定需要,或者不一定满足!
多态
需要有继承关系,有方法的重写,有把子类对象的应用赋值给父类的变量!
接口
-
interface:定义接口 implements:实现接口
-
接口中所有定义的方法都是抽象的,默认public abstract修饰
-
接口中定义的属性都是常量,默认static final修饰
-
实现了接口的类,就需要重写接口中的方法
-
implements可以实现多个接口