文章目录

  • 一、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)多态的动态绑定

  • 父类或接口的引用变量可以指向子类或者实现类的实例对象,在“执行期间” (而非编译期间)判断所引用的实际对象类型,根据其实际的类型调用其相应的方法。
  • 对于成员方法,编译看左边(子类),运行看右边(父类)。
  • 对于成员属性、静态成员属性、静态成员函数,在编译和运行都看右边(父类)。