Java基础(四)——面向对象的四大特征

来源:互联网 发布:摄像头照相软件 编辑:程序博客网 时间:2024/06/11 19:37

Java基础(四)——面向对象的四大特征

一、封装:

什么是封装?

就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。

通俗点即隐藏信息 提供使用接口给别人使用,不让别人直接操作属性或方法。


封装有什么好处呢?

1、提高代码的复用性。

2、提高代码的安全性。

3、使代码更加简洁。

4、提高代码的可维护性。

5、解耦合,提高灵活性。

二、继承:

什么是继承?

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

其中父类又叫超类或基类,子类又叫派生类。父类是子类的一般化,子类是父类的特化(具体化)。


继承有什么好处呢?

1、能提高代码的复用性。

2、能够大大缩短开发周期。

3、降低开发费用。

4、更容易修改和扩展已实现的方法。


类继承的定义:

修饰符 class 子类类名 extends 父类类名{}

特性:
子类继承了父类
即子类可以使用父类的所有属性和方法 
--(公共的 都可以使用 受保护的子类也可以都是用
默认的 跨包就没有使用的权限 
私有的 子类不管怎样没不能使用)
--构造器
每个子类的构造器都会默认调用父类的构造器,也就是的在第一句写--super();
即子类构造器都会运行父类的构造器


继承——方法的重写

1. 当子类中出现与父类一模一样的方法(返回值,函数名,形参)时,会出现重写(Override)操作.

2. 在对父类方法进行重写(Override)操作的时候,子类不允许出现与父类同名同参但是不同返回类型的方法.

3. 子类重写父类的方法的访问权限要大于或者等于父类中被重写的方法


转型:
向上转型:子类引用的对象转换为父类类型称为向上转型。
 通俗地说就是是将子类对象转为父类对象。
 此处父类对象可以是接口


向下转型:父类引用的对象转换为子类类型称为向下转型。
情况一:如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。


情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,
但是运行时会出现java.lang.ClassCastException错误。
它可以使用instanceof来避免出错此类错误。


总结:
1、父类引用可以指向子类对象,子类引用不能指向父类对象。
2、把子类对象直接赋给父类引用叫upcasting向上转型,
向上转型不用强制转型。如Father father = new Son();
3、把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。
   如father就是一个指向子类对象的父类引用,把father赋给
子类引用son 即Son son =(Son)father;
   其中father前面的(Son)必须添加,进行强制转换。
4、upcasting 会丢失子类特有的方法,但是子类overriding 
父类的方法,子类方法有效
5、向上转型的作用,减少重复代码,父类为参数,
调有时用子类作为参数,就是利用了向上转型。
这样使代码变得简洁。体现了JAVA的抽象编程思想。


三、多态:

什么叫多态?

多态的概念即“一个接口,多个方法”

多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

通俗点的例子:

 比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白酒, 从外面看我们是不可能知道这是些什么酒,只有喝了之后才能够猜出来是何种酒。

其中,方法的重写Overriding和重载Overloading是Java多态性的不同表现

方法重载:是统一各类中写有多个同名方法。
但其中的参数个数、顺序、类型不同
返回值类型、修饰符均没关系

方法重写:是子类继承父类,子类重写父类同名方法。
方法名和参数必须一致
返回值类型也必须和父类方法的返回值类型一致
范围修饰符子类的要比父类的大或等于

多态的好处:

1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。

大大提高程序的可复用性。//继承 

2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容。

可以提高可扩充性和可维护性。 //多态的真正作用



多态分两种:
(1)编译时多态(设计时多态):方法重载。

(2)运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。
(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态)
运行时多态存在的三个必要条件:
1、要有继承(包括接口的实现);
2、要有重写;
3、父类引用指向子类对象。

四、抽象:

使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。

什么是抽象?

抽象就是把一个对象分析出各个属性,来替代表达的手法 。
抽就是抽离;象 表象,即表示出来的部分


abstract 关键字
abstract(抽象)可以修饰类、方法 
抽象方法:在类中没有方法体的方法,就是抽象方法。
抽象方法的定义:
abstract 返回值类型 方法名();

抽象类:含有抽象方法的类就叫抽象类。
抽象类的定义:
abstract class 类名{}

1 用abstract关键字来修饰一个类时,这个类叫做抽象类;
 用abstract来修饰一个方法时,该方法叫做抽象方法。
2 含有抽象方法的类必须被声明为抽象类,
 抽象类必须被继承,抽象方法必须被重写。
3 抽象类不能被实例化。
4 抽象方法只需声明,而不需实现某些功能。


接口
接口定义(interface):
Java接口是一系列方法的声明,是一些方法特征的集合,
一个接口只有方法的特征没有方法的实现,
因此这些方法可以在不同的地方被不同的类实现,
而这些实现可以具有不同的行为(功能)。

接口的使用:
implements(实现)
通过类去实现接口

接口的特点:
A,接口中一般定义的是常量和抽象方法。
抽象类中可以包含抽象方法,也可以有非抽象方法,
但是有抽象方法的类一定是抽象类。抽象方法不能有方法体。
B,接口(interface)中,方法只能定义抽象方法而且默认是Public,
常量则是public static final 修饰的
(不管有没有这些修饰符,方法和常量默认具这种属性)。
C,一个类可以实现多个无关的接口(这点和继承要有所区别)。
D,接口可以继承其他的接口,并添加新的属性和抽象方法。
E,在类中实现接口的方法时必须加上public修饰符。

接口和抽象类的区别:
(1)相同点
A,两者都是抽象类,都不能实例化。
B,interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。


(2)不同点

A,interface实现,要用implements,而abstract class的实现,要用extends。

B,一个类可以实现多个interface,但一个类只能继承一个abstract class。

C,interface强调特定功能的实现,而abstract class强调所属关系。

D,尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。

E,interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。


interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),必须要实现。而abstract class的子类可以有选择地实现。

抽象类的这个选择有两点含义:
一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。
二是abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,
也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

0 0