面对对象编程(OOP, Object Oriented Programming)及其三个基本特性

  • 一千个读者,一千个哈姆雷特。对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 。

  • 面向对象编程(OOP, Object Oriented Programming)是一种编写程序的方法,旨在提升开发大型程序的效率,使程序易于维护 。

  • 面向对象编程是一种基于以下思路的程序设计方法:将关注点置于对象(Object)本身,对象的构成要素包含对象的行为及操作,以此为基础进行编程。这种方法使程序易于复用,软件的生产效率因而得以提升。其中所使用的主要编程技巧有继承、封装、多态三种。
    1.封装
    通常认为是把数据和数据操作绑定起来,对数据的访问只能通过已定义的方法或者接口。面对对象的本质就是将现实世界描绘成一系列完全自治,封闭的对象.我们再类中编写的方法是对实现细节的一种封装,我们编写的类就是对数据和数据操作的封装,可以说,封装就是隐藏一切可以隐藏的东西(隐藏那些没必要展现给类调用者的成员),只向外界提供最简单的编程接口.(保护隐私),

public class Person {

	private Object data; //将成员私有化,外界无法修改属性值
	
	/*
	 * 暴露一个公有方法,外界只能通过这个方法改变对象的属性值
	 */
	public void setData(Object data) {
		this.data = data;
	}
	
}

至于暴露接口这个,笔者我暂时也不是很理解…

public interface Service.{

	public void setData();
}

可能是给你一个service接口,你自己去实现serviceImpl,调用dao层给你的数据操作方法?(有待商榷)

2.继承
所谓继承是指继承已存在的类所拥有的成员而生成新的类,特殊和一般,子类和父类的区别;继承使变化的软件系统有一定的延续性.(复用性)

/*
 * 父类
 */
public class Parent {
	
	public int age = 40;
	public void eat() {
		System.out.println("吃饭");
	}
	public void say() {
		System.out.println("parent say");
	}
	
}
/*
 * 子类,实现简单的继承动作
 */
public class Child extends Parent {

}

测试

//测试
	public static void main(String[] args) {
		Parent p1 = new Parent();
		Child c= new Child();
		p1.eat();
		c.eat(); //继承了父类的公有方法
		p1.say();
		c.say();
		System.out.println(p1.age);
		System.out.println(c.age);//继承了父类的公有属性
	}

在这里插入图片描述

3.多态
多态是指针对同一种消息,不同的对象可以进行不同的操作(允许不同子类对同一消息做出不同的响应)
多态又分编译时多态和运行时多态:
编译时多态的实现方式是方法的重载,方法重载发生在同一个类种,同名的方法拥有不同的入参(参数个数或类型不同)视为重载.这样在编程阶段程序员可以根据不同的入参调用同名方法.

public class Demo {

	public void method() {
		System.out.println("void");
	}
	
	public boolean method(int a, int b) {
		System.out.println(a == b);
		return a == b;
	}
	
	public static void main(String[] args) {
		Demo d = new Demo();
		d.method();
		d.method(1, 2);
	}
}

在这里插入图片描述
至于运行时多态,实现方式就是方法的重写,分三步走,一是子类继承父类,二是子类重写父类的方法(抽象,或者已有的非私有方法),三是父类变量引用子类的对象.
改写上面的子类,重写父类的say方法并测试

/*
 * 子类,实现简单的继承动作
 */
public class Child extends Parent {

	@Override
	public void say() {
		// TODO Auto-generated method stub
		System.out.println("child say");
	}
	public static void main(String[] args) {
		Parent pc = new Child();
		pc.say();
	}
}

测试结果
在这里插入图片描述

多态的好处是解耦,系统中父类提供的是一个抽象方法,子类是对这个抽象方法的具体实现系统更新时,只需要换掉子类,如果布实现多态,就需要换掉整个父类,这样就可能牵一发而动全身.

另外实现接口也可以实现多态,不同类拥有同名的方法.(这点有待商榷)

猜你喜欢

转载自blog.csdn.net/weixin_37711738/article/details/89486648