面向对象三个基本特征:继承、多态、封装
Java是一种面向对象的程序设计语言,面向对象就是在计算机设计程序过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。
什么是类?
类是一种相关属性和行为的集合。是抽象的。
什么是对象?
对象是一类事物的具体体现。即对象是类的一个实例。
一、 封装
封装的定义
编写一个类就是对数据和数据的操作封装,封装即是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
封装的原则
将属性隐藏起来,若需要访问某个熟悉,提供公共方法对其访问。
封装的步骤
- 使用
private
关键字修饰成员变量。 - 对需要访问的成员变量,提供对应的
getXxx
和setXxx
方法。public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
二、 继承
继承的定义
子类继承父类的特征和行为。提供继承信息的类被称为父类(基类),得到继承信息的类被称为子类(派生类)。
继承的特点
- 一个类只能继承一个父类,构造方法不能被继承。
- 支持多层继承。
- 父类
private
的属性和方法不能继承。
继承格式
class 父类 { }
class 子类 extends 父类 { }
super 和 this:
super.成员变量---父类 super.成员方法 ---父类
this.成员变量---本类 this.成员方法 ---本类
点击查看User类
public class User {
private String name;
private Integer sex;
private Integer age;
public String getName() {
return "张三";
}
}
点击查看Teacher类
public class Teacher extends User {
/**
* 教师工号
*/
@Id
private String teacherNo;
/**
* 入职时间
*/
private LocalDateTime entryTime;
@Override
public String getName() {
return "教师的姓名是:" + super.getName();
}
}
点击查看Student类
public class Student extends User {
/**
* 学号
*/
@Id
private String StudentNo;
/**
* 专业
*/
private String major;
@Override
public String getName() {
return "学生的姓名是:" + super.getName();
}
}
三、 多态
多态的定义
同一个行为具有多个不同表现形式或形态能力。
多态的优点
- 消除类型之间耦合关系
- 可扩充性
- 可替换性
- 接口性
- 灵活性
- 简化性
多态实现方式
方式一:重载与重写
-
重载
在一个类中,同一个方法名称,不同的参数类型及个数,可以完成不同功能。例:Student的全参构造器与无参构造器
public class Student extends User { /** * 学号 */ @Id private String StudentNo; /** * 专业 */ private String major; public Student() { } public Student(String studentNo, String major) { StudentNo = studentNo; this.major = major; } }
- 重写
同一个方法名称,子类继承父类的方法,根据操作的子类不同,所完成的功能也不同。User user = new User(); User student = new Student(); User teacher = new Teacher(); System.out.println(user.getName()); System.out.println(student.getName()); System.out.println(teacher.getName()); 输出结果: 张三 学生的姓名是:张三 教师的姓名是:张三
方式二:抽象类和抽象方法
- 抽象方法
一个没有方法体的方法称为抽象方法。格式:修饰符 abstract 返回值类型 方法名(参数列表){}
- 抽象类
格式:abstract class 类名{}
特点:- 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。
- 抽象类不可以实例化。
- 抽象类的子类,可以是抽象类,也可以是具体类。如果子类为具体类,需要重写抽象类中所有抽象方法。
方式三:接口
定义:接口是一个抽象类型,是抽象方法的集合,接口通常以interface
来声明。接口无法被实例化,但是可以被实现. 一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法
- 接口中所有的方法必须是抽象方法。
- 接口只能被类实现,不能被类继承。
- 接口支持多继承。
- 接口只能含 static 和final 变量。
接口与抽象类的区别:
- 一个类只能继承一个抽象类, 而一个类可以实现多个接口。
- 抽象类中的方法可以有方法体, 接口中的方法必须是抽象方法,无方法体。
- 抽象类中的成员变量可以是各种类型,而接口中的成员变量只能是 public static final 类型。
- 抽象类可以有静态代码块和静态方法,接口中不能含 静态static 修饰的方法。
Java的抽象类和接口
final
关键字:
- 表示最终的意思,可修饰类、成员方法、成员变量。
- 修饰类:类不可被继承。
- 修饰成员方法:方法不能被重写。
- 修复成员变量:变量为常量,值不可以改变。