面向对象主要三大特征: 封装,继承,多态。
一、封装
1、封装的概念
封装性是面向对象编程的核心思想
指的就是将描述某种实体的数据和基于这些数的操作集合到一起,形成一个封装体
封装的思想保证了类内部数据结构的完整性,使用户无法轻易直接操作类的内部数据,这样降低了对内部数据的影响,
提高了程序的安全性和可维护性。
2、封装的好处
只能通过规定方法访问数据 隐藏类数实现细节 方便修改实现 方便加入控制语句
3、封装的使用
1)、修改属性的可见性 ——> 设为private
2)、创建共有的 getter / setter方法 ——> 用于属性的读写
3)、在getter / setter方法中加入属性控制语句 ——> 对属性值的合法性进行判断
public class Demo1 { public String name; // 公有的 protected int age; // 受保护的 char sex; // 默认的 private int num; // 私有的 /** * 获取私有成员num值 * @return */ public int getNum() { return num; } /** * 设置私有成员num的值 * @param num */ public void setNum(int num) { this.num = num; } }4、This关键字
this关键字主要有三个应用: this调用本类中的属性,也就是类中的成员变量; this调用本类中的其他方法; this调用本类中的其他构造方法,调用时要放在构造方法的首行。
public class Demo2 { public int num; public Demo2(){ this(1); // this关键字调用类中的其他构造函数 } public Demo2(int a){ this.fun(); // this关键字调用类中的其他方法 System.out.println(a); } public void fun(){ this.num = 101; //使用this关键字给成员属性赋值 System.out.println(this.num); } public static void main(String[] args) { Demo2 demo2 = new Demo2(); } }
二、继承
1、继承的概念和特点
概念:
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或类从父 类继承方法,使得子类具有父类相同的行为。
特点:
继承鼓励类的重用 继承可以多层继承 一个类只能继承一个父类 父类中private修饰的不能被继承 构造方法不能被继承
2、子类访问父类成员
访问父类构造方法 super(); 父类无参的构造方法
super(name); 父类有参的构造方法
访问父类属性 super.name;
访问父类方法 super.方法名();
总结super关键字:
super关键字;爱访问父类的成员
1.super只能出现在子类的方法和构造方法中;
2.super调用构造方法时,只能是第一句;
3.super不能访问法父类的private成员;
3、继承的限制和初始化顺序
问:子类可以继承父类的所有资源吗?
不能被继承的父类成员: private成员
子类与父类不在同包,使用默认访问权限的成员
问:多重继承关系的初始化顺序是怎样的?
父类属性 -> 父类构造方法 ->子类属性 ->子类构造方法
4.方法的重写
在子类中可以根据需要对父类中继承来的方法进行重写; 重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型; 重写方法不能使用被重写的方法更严格的访问权限
三、多态
1、多态的概念
生活中的多态:
不同类型的打印机打印效果不同
黑白打印机 黑白纸张
打印机
彩色打印机 彩色纸张
程序中的多态 :父类引用,子类对象
同一种事物,由于条件不同,产生的结果也不同
多态:同一个引用类型,使用不同的实例而执行不同操作
将父类对象应用于子类对象的特征就是面向对象编程中的多态性的体现
多态指的就是在应用程序中出现的“ 重名 ” 现象。多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类及其相关类。这样既降低了维护难度,又节省了时间
2、使用多态实现思路
编写父类
编写子类,子类重写父类方法
运行时,使用父类的类型,子类的对象
3、实现多态的三个必要条件
继承 重写 父类引用指向子类对象 在Java语言中,多态性主要表现在以下几个方面:方法重写,抽象类,接口
四、对象之间的比较
在Java语言中,对象之间的比较提供了两种方法:
“ == ” 运算符 ,equals() 方法
区别:
“ == ” 运算符所进行的是所引用对象的内存地址是否一致
equals()方法是String类中的方法,其所进行的是两个对象引用所指的内容是否相同的比较
微信公众号: