Java基础(四)——⾯向对象的四⼤特征
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(实现)
通过类去实现接⼝
java重写和重载的区别接⼝的特点:
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的⼦类在继承它时,对⾮抽象⽅法既可以直接继承,也可以覆盖;⽽对抽象⽅法,可以选择实现,
也可以通过再次声明其⽅法为抽象的⽅式,⽆需实现,留给其⼦类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论