2021Java知识复习记录[1]——面向对象梳理

目录

  • java概念
    • 三大特性
    • 面向对象的其他概念
      • 概念篇
      • 面向对象总结及五大原则

java概念

三大特性

封装:
封装就是把具体的实现细节隐藏起来,对外只提供一个说明作用的接口供使用。用户无需知道这个功能是如何实现的,只需要知道如何使用即可。
作用:使变化隔离、提高安全性、提高重用性、便于使用
实现方法:修改全局变量为私有变量、创建get/set方法(用于读取变量)、在get/set中加入属性控制语句(用于判断属性的合法性)
Ps.boolean值的get方法的默认名为isXXX()
实例

public class dog{
     
	/**将一条狗的属性封装**/
	private String name;
	private int age;
	/**下面是调用及修改被封装的属性的方法**/
	public String getName(){
     
		return name;
	}
	public void setName(String name){
     
		this.name=name
	}
	public int getAge(){
     
		return age;
	}
	public void setAge(int age){
     
		this.age=age;
	}
}

继承:
关键字:extends
当多个类有相同的属性(成员变量)及行为(成员方法)时,可以将这些共有的部分抽离出来创建一个公共的类,让这些类继承这个公共的类,使得这些类不需要再定义这些共有的部分。这个公共类就叫父类,也叫超类或者基类。其他这些继承父类的类叫做子类。子类可以访问父类的非私有化成员变量,访问私有成员变量需使用supe.get()。
在Java中是单继承,一个子类只能由一个父类,一个父类可以由多个子类。
作用:减少代码量,提高复用率、是实现多态的前提、

多态:
多态是对象的多种形态,分为引用多态和方法多态。
所谓多态,就是java程序中定义的引用变量指向的具体类型和通过该引用类型发出的方法调用时不确定。该引用变量发出的方法需调用哪个类的方法在运行时才能确定。
前提:必须有继承关系、子类必须重写父类的方法、父类的引用变量指向子类的对象。
作用:

  1. 可替换性:多态使一段代码具有可替换性。
  2. 可扩充性:新增的子类不影响已存在的类的特性的运行和操作
  3. 接口性:多态时超类通过方法签名向子类提供了一个接口,由子类来完善或者覆盖它而实现。
  4. 灵活性:在应用中灵活多样的操作,提高了使用效率。
  5. 简化性:多态简化了代码的编写和修改,大大提高了开发效率。

成员变量:编译和运行时都看父类。
成员方法:编译看父类,运行看子类。

面向对象的其他概念

概念篇

接口:
接口时一系列方法的声明,是一些方法特征的集合。接口是一种特殊的类,是一个抽象类,由全局常量和公共抽象方法组成。实际用途中接口往往用于制定标准。
实例:

/**定义接口**/
interface personHealth{
     
	final int a = 10;
	void getHurt();
}
/**实现接口的类**/
class npc implements personHealth{
     
	public void getHurt(){
     
		System.out.println("npc对小人造成伤害了!");
	}
}
class self implements personHealth{
     
	public void getHurt(){
     
		System.out.println("小人对自己造成伤害了!");
	}
}
/**主方法测试类**/
public static void main(String[] args){
     
	npc n = new npc ();
	n.getHurt();
	System.out.println(a);
}

结果:
npc对小人造成伤害了!
10

注意:不能实例化一个接口因为接口中都是抽象方法,没有方法体,但是可以使用接口类型的引用指向一个实现了接口的类,并可以调用接口中的方法。这也是多态的一种应用。
现在应用多态的写法修改一下上面的实例。
实例:

/**定义接口**/
interface personHealth{
     
	final int a = 10;
	void getHurt();
}
/**实现接口的类**/
class npc implements personHealth{
     
	public void getHurt(){
     
		System.out.println("npc对小人造成伤害了!");
	}
}
class self implements personHealth{
     
	public void getHurt(){
     
		System.out.println("小人对自己造成伤害了!");
	}
}
/**主方法测试类**/
public static void main(String[] args){
     
	personHealth n = new npc();
	n.getHurt();
	personHealth s = new self();
	s.getHurt();
}

结果:
npc对小人造成伤害了!
小人对自己造成伤害了!

  • 一个类可以实现多个接口。 接口也可以继承,且可以多继承。
  • 一个类如果要实现某个接口,它必须要
  • 实现这个接口中所有的方法。
  • 接口中所有的方法都必须是抽象的或者public的,所有属性都是public,static,final的。
  • 接口可以用来弥补无法多继承的缺陷。
  • 接口可以用来实现解耦
  • 接口中可以没有任何方法,仅仅用于标识一些类。

抽象:
抽象就是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象,抽象只关注对象有哪些属性和行为,不关注具体细节,主要应用于继承和接口这两种案例。
静态绑定:
在程序运行前就知道方法属于哪个类,编译时就可以连接到类中,定位到这个方法。在java中,final,static,private修饰的方法及构造函数都是静态绑定的,不需要运行就知道方法时哪个类的。
动态绑定:
指程序运行过程中,根据具体的实例对象才能具体确定是哪个方法。
方法重载:
编译时的多态性(前绑定)取决于方法的参数,方法名相同而参数或者参数个数不同,调用方法时根据参数来确定如何实现这个方法。
方法重写:
运行时的多态性(后绑定)取决于new的对象,使用@override注解标记。方法的执行由new的对象来决定。new的对象不同,在调用方法时执行的结果也不同,

面向对象总结及五大原则

面向对象编程(OOP - Object Oriented Programming),还有OOD(面向对象设计),OOA(面向对象分析)。

一切事物皆对象,把现实事物及关系抽象成类,通过继承,实现,组合的方式容纳万事万物。实现了对现实世界的抽象和数学建模。

相比于面向过程,面向对象不关注具体过程而只关注对象,降低了耦合性提高了维护性。

面向过程是具体化,流程化的,为了实现某个功能你需要一步步的分析一步步的实现。面向对象是模型化的,你只要抽象出一个类,这是一个封闭的盒子,盒子里装着实方法现的细节和属性,需要什么功能直接使用盒子,而不用关心盒子里面是怎么回事。面向对象其实就是将面向过程抽象成类然后封装。

面向对象五大原则:

  • 单一职责原则(SRP - Single Responsibility Principle):类的功能需要单一,不可以开染坊。
  • 里式替换原则(LSP - the Liskov Substitution Principle):子类可以替换父类可以出现的任何地方,例如触摸屏可以代替普通屏。
  • 开放封闭原则(OCP - Open Close Principle):一个模块对于拓展是开放的,对于修改是封闭的。
  • 依赖倒置原则(DIP - the Dependency Inversion Principle):高层次的模块不应依赖于低层次的模块,应该依赖于抽象。抽象不应该依赖于实现,实现应该依赖于抽象。比如说考场禁止携带电子产品,这里说的是电子产品,是一个抽象,而不是说手机,手提电脑,电子手表,计算器。比如说你在外国会说你是中国人,而不是告诉别人你是江苏人,你是湖南人,或者你是xx村的人。
  • 接口分离原则(ISP - the Interface Segregation Principle):设计时采用多个与特定客户有关的接口比采用一个通用的接口要好,比如汽车有传动,悬挂,发动机,供电,把这些都拆分成不同的接口,比糅合成一个接口要好。

面向过程是机器的思维,面向对象是人类的思维

你可能感兴趣的:(java,java,面向对象编程,多态,封装)