文章目录
- 一、JAVA 面向对象
- 1、Java 面向对象概述
- 二、JAVA 面向对象三大特性
- 1、封装
- 2、继承
- 3、多态
一、JAVA 面向对象
1、Java 面向对象概述
Java 面向对象(Object Oriented Programming,OOP) 面向对象的程序设计。
面向对象是相对于面向过程而言的,面向对象和面向过程都是一种编程思想,但面向过程去强调的是功能行为,面向对象将功能封装成对象,强调了具备功能的对象。面向对象是基于面向过程的
二、JAVA 面向对象三大特性
1、封装
(1)封装介绍
- 将特定功能的代码隐藏(私有化),对外提供公共的访问方法和接口。每个属性有两个公共的访问方法。 简记:属性私有化,提供set、get方法(失血模型)。
- 封装Demo:
定义一个Person类
public class Person{
private String name;
private String sex;
private int age;
//set、get失血模型
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
main函数类
public class Demo{
public static void main(String[] args){
//创建Person类的对象
Person p = new Person();
//利用set方法给创建的对象赋值
p.setName("张三");
p.setSex("男");
p.serAge(18);
//打印输出结果,利用get方法得到结果
System.out.println("姓名 = " + p.getName + " 性别 = " + p.getSex + " 年龄 = " + p.getAge);
}
}
- 将属性私有化之后,本类以外即使创建了该类的对象,也不能直接访问这个属性,而采用了get、set失血模型后,就对外提供了一个访问的接口,就可以通过get、set对属性进行访问。
- private:私有化,是一个权限修饰符,用于修饰类中的对成员(包括成员方法和成员属性),私有化只在本类中有效。
- 私有化只是封装的一种形式,封装还有其他的体现形式。
(2)封装的优点
- 能够将变化隔离;
- 便于调用和使用;
- 能够提高代码的复用性;
- 能够提高代码的安全性。
(3)封装的原则
- 将不需要对外提供的内容都隐藏起来;
- 把属性都隐藏,对外提供公共的访问接口。
2、继承
(1)继承介绍
- 将两个类的共同部分向上抽取单独成为一个类,使用关键字extends进行父类和子类的链接, 在子类中加上extends,后面要跟要继承的父类的名称,继承只能继承父类非私有的属性和行为。
- 父类:用来被子类继承的称作父类,或叫做超类。
- 子类:继承父类的类称作子类,子类可以新增方法。
- 继承示例
定义一个Person类,具有属性name和方法eat()
public class Person{
public String name;
public void eat() {
System.out.println("我在吃饭");
}
}
//定义一个Student类继承Person类
public class Student extends Person{
public String ID;
public void eat() {
System.out.println("学生在吃饭");
}
public void study() {
System.out.println("我在学习");
}
}
//定义一个Worker类继承Person类
public class Worker extends Person{
public String WorkID;
public void eat() {
System.out.println("工人在吃饭");
}
public void work() {
System.out.println("工人在工作");
}
}
在示例中,学生和工人都继承了Person类,所以都拥有了父类Person的属性和方法,但是除了继承过来的属性和方法外,子类还可以拥有自己特有的属性和方法,比如Student类的ID属性和study()方法,而Worker类具有WorkerID属性和work()方法。
(2)只支持单继承,不支持多继承。
- 子类不能有多个父类,因为多继承会带来安全隐患:当多个父类定义相同的功能而功能内容不同时,子类对象不知道运行哪个。
- 但Java保留了这种多继承机制,并用另一种体现形式来完成——实现。
(2)继承的作用
- 提高了代码的复用性;
- 继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
- 让类与类之间产生了关系,有了这个关系,才有了多态的特性。
(3)重写Overriding(覆盖)
- 子类和父类有一样的函数,只有主体(大括号以内的细节代码)不一致,叫做重写;
- 子类中不能重写父类中的final方法;
- 子类中必须重写父类中的abstract方法;
- 当子类出现和父类一模一样的函数时,子类对象调用该函数,会运行子类函数的内容平,如同父类的函数被覆盖一样;
- 子类覆盖父类,必须保证子类权限大于等于父类权限才可以覆盖,否则编译失败;
- 静态只能覆盖静态。
(4)重写和重载的区别
- 重写:在继承关系中,子类和父类的方法一模一样,相同的参数列表和相同的返回类型,只有方法的主体(大括号里面的)不一样。
- 重载:同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同,与返回值无关。
3、多态
(1)多态介绍
- 一种事物同时具备多种形态,这种现象就叫做多态。
- 父类的引用指向子类的地址,子类重写了父类的方法。此时创建的对象就同时拥有父类的方法和子类的特殊方法,即同一个对象在不- - 同状态下拥有不同方法。
(2)多态发生的前提
- 存在继承或者接口实现
- 子重写父类的方法
- 父类的引用指向子类的对象
(3)多态的作用
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
- 可维护性
(4)多态的向上转型和向下转型
- 向上转型
父类的声明创建子类的示例,该对象只能调用父类的成员属性和方法。
父类引用,指向子类对象。此时对象的范围更大,只能调用子类重写父类后的方法,对象的属性只能用父类的属性。 - 向下转型
要想该对象能够执行子类特有的方法,必须向下转型,用子类的声明一个变量,去接受强制向下转型的父类对象。
(5)多态的动态绑定
- 父类或接口的引用变量可以指向子类或者实现类的实例对象,在“执行期间” (而非编译期间)判断所引用的实际对象类型,根据其实际的类型调用其相应的方法。
- 对于成员方法,编译看左边(子类),运行看右边(父类)。
- 对于成员属性、静态成员属性、静态成员函数,在编译和运行都看右边(父类)。