面向对象三大特性之多态和封装
面向对象三大特性:
1.封装
1.1 封装定义
封装是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。
1.2 封装的作用
保护类中的信息
隐藏细节信息
提高软件的复用率
1.3 封装的实现
使用访问控制符 private,default(默认忽略不写),protected,public
2 多态
多态的现实意义:
- 现实事物总是会体现出多种形态。比如张三这个学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态称为多态。
- Java作为面向对象的语言,同样可以描述一个事务的多种形态。如Student类继承了Person类,一个Student对象既是Student,又是Person。
- 多态体现为父类引用变量可以指向子类对象。
- 多态格式:父类类型 变量名=new 子类类型();如Person 张三 = new student();
2.1 多态的概念
面向对象多态是指:
- 同一种类型
- 在不同时间运行相同程序(运行时)
- 产生结果不同
严重的问题,1.就是子类对象只能调用子类中重写的父类方法,而不能调用子类特有的方法,(并且对于成员变量,向上转型(也就是一般的多态)只能调用父类的成员变量,而不能访问子类的成员变量)例如:
Collection<String> Lists = new ArrayList<>();
//父类 = new 子类(向上转型),集合Lists没有索引
问题解决办法:
1.向上转型,只能调用父类的成员变量,和子类重写的父类方法;
2.向下转型,无限制!例如:
Collection<String> Lists = new ArrayList<>();
ArrayList Lists02 = (ArrayList) List;//向下转型(强转)
2.2满足多态的三个必要条件
- 存在继承关系
- 父类的引用指向子类对象(即类型相同)
- 子类对父类方法重写
2.4 案列:
public class demo04 {
public static void main(String[] args) {
People a=new Student();
a.eat();
People b=new Teacher();
b.teach();
}
}
class People{
public void eat(){
System.out.println("上班");
}
}
class Student extends People{
public void eat(){
System.out.println("吃面");
}
public void study(){
System.out.println("学习");
}
}
class Teachers extends People{
public void eat(){
System.out.println("吃米饭");
}
public void teach(){
System.out.println("授课");
}
}
2.4 接口
在Java编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
2.4 接口特点
- 接口中存储的数据是常量<summary
- 接口中的方法是抽象方法
publi abstract void add (int a ,int b);- 接口瀑布能被实例化
即不能创建接口对象。- 接口不能有构造方法
构造方法的作用是初始化对象,接口中的数据是常量,使用static修饰- 接口可以继承多个接口
接口从形式上完成java的多继承