第一章 对象导论

    工作两年多,再来读《Java编程思想》,希望能够有更深的理解,巩固好基础。如有不对,还望指正。

Java面向对象的三大特征:

封装、继承、多态

1. 封装
        所谓封装指的是隐藏对象的属性以及实现细节,仅对外提供访问方式,将不需要对外提供的内容进行隐藏,把属性隐藏对外提供访问方式。
封装的优点
将变化隔离
便于使用
提高重用性
提高安全性
封装的缺点
将变量等使用private修饰,或者封装进方法内,使其不能直接被访问,增加了访问步骤与难度
举例
抽象出一盏灯,它有自己的种类(名字name),有开灯(on),关灯(off)两个动作,将它封装成一个类,便于统一操作。
public class Light {

	public String name;

	public Light() {
		super();
	}

	public Light(String name) {
		super();
		this.name = name;
	}

	public void on() {
		System.out.println(name + " is on.");
	}

	public void off() {
		System.out.println(name + " is off.");
	}

	@Override
	public String toString() {
		return "This is a " + name;
	}

}

2. 继承
        多个类具有共同的属性(成员变量)与行为(成员方法)的时候,将这些共同的部分抽取出来定义到一个公共的类中,其他及各类可以与这个公共的类形成继承关系,从而在多个类中不需要重复定义公共部分!这个公共的类就是父类,也称为超类或者基类,其他的类就是子类。子类可以直接访问父类的非私有化成员变量,访问父类的私有化成员变量可以使用super.get()方法。
继承的特点
Java只存在单个继承不存在多个继承,即,一个类只能有一个父类
Java可以多层继承,多重继承
继承的优点
继承是基于存在多个重复代码的时候提出的,那么继承能够很好地提高复用率
继承的缺点
继承使得多个类之间具有了父子类关系,当一个类存在多个子类的时候,如果父类发生变化,name这些子类会跟着一同变化,造成类与类之间的"强耦合"关系
举例
FluorescentLight继承Light
public class FluorescentLight extends Light {

	public FluorescentLight(String name) {
		super(name);
	}

}
3. 多态

        Java程序中定义的引用变量所指向的具体类型和通过该引用类型发出的方法在调用时不确定,该引用变量发出的方法到底调用哪个类的实现的方法,必须在程序运行期间才能决定,这就是多态。

多态存在的前提
必须有子类和父类,具有继承或实现
子类必须重写父类的方法
父类的引用变量指向子类的对象
多态的优点
可替换性:多态对已存在的代码具有可替代性
可扩充性:增加的子类不影响已存在的类的特性的运行和操作
接口性:多态时超类通过方法签名向子类提供了一个公共的接口,由子类来完善或者覆盖它而实现的
灵活性:在应用中体现了灵活多样的操作,提高了使用的效率
简化性:多态简化对应用软件的代码的编写和修改过程,尤其在处理大量的对象的运算和操作时,这个特点尤为突出和重要

多态的缺点
只能使用父类的引用访问父类的成员
举例
NeonLight继承Light,并重写了toString方法。从main方法可以看到,此刻Light可以是NeonLight,也可以是FluorescentLight,同时此处涉及到了向上转型。
public class NeonLight extends Light {

	private String color;

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public NeonLight(String name) {
		super(name);
	}

	public NeonLight(String name, String color) {
		super();
		this.name = name;
		this.color = color;
	}

	@Override
	public String toString() {
		return "This is a " + name + ", and its color is " + color;
	}
	
	public static void main(String[] args) {
		Light fl = new FluorescentLight("FluorescentLight");
		System.out.println(fl.toString());
		Light nl = new NeonLight("NeonLight", "yellow");
		System.out.println(nl.toString());
	}

}
本文基础内容转载自Java中面向对象三大特征总结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值