一、封装
1)定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
2)封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。
就像现在在用电脑或手机看这篇文章,你使用电脑或手机的时候并不需要理解电脑或手机内部是怎么样构成的,你只需要对点开浏览就可以了。
二、继承
1、
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
java中使用extends 关键字表示继承,如下:
class 父类 {}
class 子类 extends 父类{ }
2、
重写:表示子类中的方法名、返回值、参数列表和父类当中的方法是一模一样(子类继承了父类的所有方法,包括父类中的方法。子类可以直接使用父类的方法,也可以重写父类的方法来实现自己的功能。在子类中可以通过super关键字来调用父类的方法。)
三、多态
多态是面向对象程序设计中的一个重要概念,指的是同一个方法调用可以根据对象的不同而表现出不同的行为。简单来说,多态就是通过子类重写父类的方法,实现对同一方法的不同实现。
引用数据类型:
(1)向上转型:父类引用指向子类对象,属于自动类型转换。
父类类型 变量名 = 子类对象;
(2)向下转型:子类引用指向父类对象。属于强制类型转换。
子类类型 变量名 = (子类类型)父类对象;
四、抽象类
所谓接口就是对操作规范的说明。接口只是说明操作应该做什么( What),但没有定义操作如何做( How)。接口可以理解成为类的一个特例,它只规定实现此接口的类的操作方法,而把真正的实现细节交由实现该接口的类去完成。
接口在面向对象分析和设计过程中起到了至关重要的桥梁作用,系统分析员通常先把有待实现的功能封装并定义成接口,而后期程序员依据此接口进行编码实现。
定义接口用interface修饰:
interface 接口名[ extends 父接口 1,父接口 2,···]{
//常量定义
//方法定义
}
接口的继承:
// 定义一个父接口
interface Animal {
void eat();
void sleep();
}
// 定义一个子接口,继承自父接口,并添加了一个新方法
interface Dog extends Animal {
void bark();
}
// 实现子接口
class Labrador implements Dog {
@Override
public void eat() {
System.out.println("Labrador is eating");
}
@Override
public void sleep() {
System.out.println("Labrador is sleeping");
}
@Override
public void bark() {
System.out.println("Labrador is barking");
}
}
public class InterfaceInheritanceExample {
public static void main(String[] args) {
Labrador labrador = new Labrador();
labrador.eat(); // 输出:Labrador is eating
labrador.sleep(); // 输出:Labrador is sleeping
labrador.bark(); // 输出:Labrador is barking
}
}
抽象类与接口的区别:
1、接口是行为的抽象,是一种行为的规范,接口是like a 的关系;抽象是对类的抽象,是一种模板设计,抽象类是is a 的关系。
2、接口没有构造方法,而抽象类有构造方法,其方法一般给子类使用
3、接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
4、抽象体现出了继承关系,继承只能单继承。接口提现出来了实现的关系,实现可以多实现。接口强调特定功能的实现,而抽象类强调所属关系。