欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

面向对象编程基础--OOP

程序员文章站 2022-03-03 10:41:17
* 以下只是从最基础的角度理解OOP,涵盖的角度很小!一:封装 privateprivate string stuName;类的组成:字段+方法字段:又称全局变量、数据。由于数据很重要,通常使用private保护起来,对外提供get、set的方法构造方法:与类同名,不能有返回值,不能被手动调用(自动调用),允许重载,不能被继承,默认无参构造方法的作用:NEW类实例时,自动给初始化字段赋值,简化操作重载overload:两个及两个以上的同名方法,且参数列组合不同封装的本质:把业务逻辑封装起来,...
* 以下只是从最基础的角度理解OOP,涵盖的角度很小!

一:封装 private

private string stuName;
类的组成:字段+方法
字段:又称全局变量、数据。由于数据很重要,通常使用private保护起来,对外提供get、set的方法
构造方法:与类同名,不能有返回值,不能被手动调用(自动调用),允许重载,不能被继承,默认无参
构造方法的作用:NEW类实例时,自动给初始化字段赋值,简化操作
重载overload:两个及两个以上的同名方法,且参数列组合不同
封装的本质:把业务逻辑封装起来,对外提供清晰明确的接口
封装的目的:保护私有字段的安全,增强代码的可维护性

package csdn.oop;

import java.util.regex.Pattern;


public class Student {
	public enum Sex{,,其他
	}
	private int id;
	private String name;
	private int age;
	private Sex sex;
	
	public int getId() {
		return id;
	}

	public void setId(int id) throws Exception {
		if (Pattern.matches("^\\d{6}$", String.valueOf(id)))
			this.id = id;
		else throw new Exception("请输入六位数字的id!");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) throws Exception {
		if (6 < age && age < 60)
			this.age = age;
		else throw new Exception("该生年龄不在规定范围内!");
	}

	public Sex getSex() {
		return sex;
	}

	public void setSex(Sex sex) {
		this.sex = sex;
	}

	public Student() {

	}
	
	public Student(int id, String name, int age, Sex sex) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	
	
	private void info() {
		System.out.println("我是一名学生");
	}
	
	public void doWork() {
		System.out.println("我在工作");
	}
}

二:继承 extends

人->动物->生物
父子类:子类与父类,具体与抽象,子类继承父类除构造方法以外的所有非私有属性和方法。

*** 子类可以无条件的给父类赋值,子类给父类赋值永远都是安全的,父类给子类赋值是危险的。

基类:抽象出大量类的共性成为一个基类,可以跨级,即生物类是动物类的基类
继承的作用:子类自动继承父类属性和方法,子类不再存在重复代码,实现代码复用,是多态的前提
重写override:又称覆写,覆盖父类的同名方法,@Override
super关键字:可以调用父类方法和属性,甚至构造函数。
this关键字:调用子类(本类)方法或属性,未有,才到父类寻找
Object类:祖类,所有类的祖先(superClass),所有类都是Object的派生类,所有类默认继承Object

package csdn.oop;

public class ClassLeader extends Student {

}

面向对象编程基础--OOP
可以看见,被private修饰的方法无法被继承和调用,这里还有许多来自Object类的方法与属性,是因为Student自动继承了Obejct,继承的内容是可以被传递的

三:多态(核心)

多态的本质:一个对象有着多重特征,在不同情况(通过不同子类实现的同方法),表现不同状态,对应不同属性和方法
逻辑层:一个抽象的指令,使得一组具有相同行为但具有不同内容的个体协调同一个工作的过程
引用层:建立一个父类对象的引用,它所指对象可以是这个父类的对象,也可以是它的子类的对象,
java中当子类拥有和父类同样的函数,当通过这个父类对象的引用调用这个函数的时候,
调用到的是子类中的函数。
多态的特点:一定存在继承关系(前提),一定会存在重写方法,一定存在子类向父类赋值的过程
多态的作用:
1,可维护性好,灵活性好,拓展性高(OOP特性)
2,可以实现控制反转,把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,
3,写出通用的代码,做出通用的编程,以适应需求的不断变化,满足Open-Close原则

*** 引用Charlie Calverts对多态的描述–多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4
编程技术内幕")。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object
Pascal和C++中都是通过虚函数实现的。


  • Open-Close原则:当软件需求发生变化,以添加新代码的方式达到适应,而非修改原代码
package csdn.oop;

public class CommonStudent extends Student {
	@Override
	public void doWork() {
		System.out.println("我是普通学生,我管好自己就行了");
	}
}
package csdn.oop;

public class ClassLeader extends Student {
	@Override
	public void doWork() {
		System.out.println("我是班*,我负责管理班级事务");
	}
}

面向对象编程基础--OOP
student和student2都是Student类型的对象,执行同一个方法–doWork却出现了不同的结果,并且我们没有修改Student类,只是添加了两个新的子类

总结:封装就是为了安全性,继承就是为了复用,多态就是为了可维护与灵活性!

本文地址:https://blog.csdn.net/AnTiforsec/article/details/107351706