世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。 ——摘自周志明

5面向对象基本特征

封装

1、把对象的属性、行为封装起来,其载体是类。
	属性封装:private 私有化
	行为封装:方法,封装的是一个独立的功能,一段代码。
	对于调用者来说,隐藏了实现细节;暴露一些方法的签名供开发者调用。
2、广义的封装
	组件封装:对方给你开放了接口,你按照它规定的格式,把数据传给它,它计算完,并把结果返回。
	例如:第三方组件、支付宝、网银支付。。。。
  系统封装:对使用者来说,不知道实现细节,但是知道怎么用。

标准的javaBean
	(1)属性私有化
	(2)提供get/set方法
	(3)保留无参构造

继承(延续:相同点、扩展:特有点)

为什么有继承?

1、为了代码复用和功能扩展

如何实现继承?

 [修饰符] 子类名 extends 父类名{}  

继承的特点?

	1、java只支持单继承。
	2、java支持多层继承。
	3、父类可以有多个子类。
	4、子类会继承父类所有的属性和方法,但是如果修饰符为private,虽然继承过来了,但是不可见。
	5、子类不会继承父类的构造器。
	6、子类的构造器一定会调用父类的构造器。并且默认调用父类的无参构造器。当父类没有无参构造器时,需要在子类中,手动调用父类的构造器:super(实参列表);

	为什么调用父类的构造器??

重写(override)

	定义:在子类中重写继承自父类的方法,方法名和参数列表相同,方法实现不同
  • 特点
    • 方法名:完全相同
    • 形参列表:完全相同
    • 返回值类型
      • void或者基本数据类型时:完全相同
      • 引用数据类型时:返回父方法类型,或者父方法返回类型的子类。
    • 修饰符
      • 权限修饰符
        • 重写方法的修饰符 >= 被重写方法的修饰符
        • 注意:父类方法不能是private,子类中不可见
      • 其他
    • 抛出的异常列表

多态

为了代码更灵活
实现多态的前提是继承。
多态:就是父类引用指向子类对象。(编译看左,运行看右)

解惑?

	1、Overload与Override的区别
	Overload:重载  load的英文意思是载入,装载
	Override:重写 

	Overload概念:表示在同一个类中,出现了方法名相同,形参列表不同的两个或多个方法,称为方法的重载。注意与返回值无关。
	Override:当子类继承父类时,会继承父类中的所有方法,但是父类的某个方法的实现不适用于子类,那么子类就重写该方法。
	重写要求:
		方法名:必须完全相同
		形参列表:必须完全相同
		返回值类型:1、如果是void、基本数据类型,则要求返回类型完全一样
		2、如果父类方法返回类型时引用类型,则子类方法返回类型<父类方法返回类型。

	2、java为何设计单继承?而不是多继承呢?接口为什么能多实现呢?
		①从技术角度讲,降低复杂性。
		类A有一个m()方法,类B有一个m()方法,而类C继承A,B;此时会发生问题,就是不确定继承哪一个m()方法。至于接口为啥是多实现呢?难道接口中的变量(属性都是 static final修饰的,即常量)可以区分?在编译器,常量值不同时不能通过编译。所以属性肯定一样的。至于方法,接口中的方法都是抽象方法,需要实现该接口的类去实现方法,最终调用的是子类的方法;而继承则不一样,父类的方法也是可以调用的,例如super.m(),你就不能确定调用A?还是B类中的方法了。
posted @ 2018-10-15 18:49  白杯与咖啡  阅读(166)  评论(0编辑  收藏  举报