java面向对象-类与对象,java面向对象菜鸟教程
本文继续:java——面向对象详细介绍(二)11、接口(interface)
引入:抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类” 接口;
示例:
其实生活中听说过的USB接口,并不是我们看到的插槽,而是那些插槽遵循的一个标准;而我们看到的那些插槽只是按照USB规范设计的例子,也就是说插槽是USB的例子;
对于不同类型的USB设备,其各自的USB插槽需要遵循一个规范,可以保证插入插槽的设备能够与主板正常通信;
对于同类型主板上的多个USB插槽,它们具有相同的数据交换方式和相同的实现细节,可以认为是同一类的不同实例。
我的总结:
接口只定义了类应该遵循的规范,而不关心这些类的内部数据和它们的方法中的实现细节。
接口只指定这些类中必须提供的方法;这样,规范和实现分离,增强了系统的可扩展性和可维护性。
使用接口的好处是更好的扩展性和可维护性,所以我们在开发中经常使用接口(相当于定义了一个标准)
interface定义
定义一个接口的规范,这个规范规定了一个类必须做什么,但是不管多具体它都做;
[修饰符]接口接口名称扩展了父接口1、父接口2.
没有构造方法,无法实例化;
接口只能继承接口,不能继承类。
接口中没有常用方法,所有方法都是抽象的;
接口中方法的默认修饰符是public abstract;
接口中的字段都是全局常量,默认修饰符是public static final
界面中的成员包括(主要是前两个):
全局常量
的公共抽象方法
内部类(包括内部类、内部接口和内部枚举类);
我的总结:
接口没有构造方法,不能实例化!
接口中的方法都是抽象的,没有普通的方法,有一个默认的修饰符public abstract,必须覆盖!
12、接口的使用
格式:公共类Subimpl扩展超级实现ia,IB
接口可以继承更多,但是只能继承接口,不能继承类。
实现接口(支持多种实现)
[修饰符]类名实现接口1,接口2.
接口的实现必须遵循扩展;
实现接口的方法必须是public类型。
与接口类的关系:
实现关系或者继承关系。
可以说是类实现了接口的方法,也可以说是类继承了接口的方法。不同的情况有不同的理解!
13、面向接口编程之制定标准和简单工厂模式
制定一个标准,让别人达到或者达到!
例如:
接口{//定义USB标准
void use USB();//USB有使用USB的行为。
}工厂方法模式
建个工厂,在里面生产,用的时候直接拿走。
我的总结:
好处:屏蔽了不同子类的实现差异,提高了代码的扩展性和可维护性;
包审查演示;
//工厂方法模式
接口电话{//制定标准时实现send()方法。
public void send();
}
Iphone类实现Phone{
@覆盖
public void send() {
System.out.println(Iphone正在发短信);
}
}
AndroidPhone类实现Phone{
@覆盖
public void send() {
System.out.println(安卓手机在发短信);
}
}
MyPhone类实现Phone{
@覆盖
public void send() {
System.out.println(我的手机在发短信);
}
}
类工厂{
public static void show(string type){//传入参数,可以根据不同类型定制。
如果(type . equals()){//为空,则不往下走。
system . out . println(‘对不起,类型为空!请重新输入!);
返回;
}
电话p=空;
如果(‘Iphone’。equals(type)){//确定类型
p=新Iphone();
}else if(AndroidPhone )。等于(类型)){
p=new Android phone();
}否则{
p=new my phone();
}
p . send();
}
}
公共类FactoryDemo17 {
公共静态void main(String[] args) {
新工厂()。show( Iphone );//调用方法
新工厂()。show( Android phone );
新工厂()。显示(我的手机);
新工厂()。显示(您的电话);
新工厂()。显示(“”);
}
}输出:
Iphone在发短信。
安卓手机在发短信。
我的手机在发短信。
我的手机在发短信。
抱歉,类型为空!
14、面向接口编程之适配器模式
用一个现成的类,但是它的接口并不能完全满足你的需求。我只想要它的一个方法,不想重写其他方法。
比如形态变大变小变封闭,现在我只需要封闭行为;
包审查演示;
//适配器模式:只想使用这些方法中的一种,并使用适配器作为中间过渡。
界面窗口{
void max();
void min();
void close();
}
//适配器模式,实现接口的所有方法,但不写方法体!
类适配器Windows实现Windows{
@覆盖
公共void max() {
}
@覆盖
公共void min() {
}
@覆盖
公共void close() {
}
}
MyWindows类扩展AdapterWindows{
//重写父类的方法
公共void close(){
System.out.println(这个实现了关闭功能!);
}
}
公开课演示17 {
公共静态void main(String[] args) {
新的MyWindows()。close();
}
}接口和抽象类的比较
相同点:
处于继承的顶层,用于被他人实现或继承;
无法实例化;
都包含抽象方法,它们的子类必须覆盖这些抽象方法;
差异:
抽象为一些方法提供实现,防止子类重复实现这些方法,提供代码重用性;接口只能包含抽象方法;
一个类只能继承一个直接父类(可能是抽象类),但可以实现多个接口;(接口弥补了Java的单一继承)
两者都选:
先选接口,尽量少用抽象类;
抽象类只有在需要定义子类的行为和为子类提供通用函数的时候才选择;
总结:接口不能有构造函数,抽象类可以有构造函数,
抽象可以定义构造函数(包括带函数的构造函数)是因为它的子类在创建时可以正确初始化,但抽象类不能实例化。
知识点:如果你不能或者还没有创建一个对象,那么我们必须添加静态装饰。如果不能用对象调用,就要用类调用。
16、匿名内部类
只适合使用一次的类。
不能是抽象类,因为当系统创建匿名内部类时,会立即创建匿名内部类的对象。
匿名内部类不能定义构造函数,因为它没有类名。
格式:
新的父类构造函数([参数列表])或接口()
{
//匿名内部类的类体部分
}17、枚举类
有了enum声明,默认直接继承java.lang.Enum类,而不是Object类;
枚举对象是固定的,实例的数量是有限的,所以不能是new(),枚举对象后可以后跟()。
枚举元素必须在枚举类的开头,枚举元素后面应该有分号,以区别于其他成员。
枚举的构造函数的权限修饰符是私有的;默认情况下;
一旦枚举对象后跟{},该对象实际上就是一个匿名的内部类对象。
所有枚举类都提供了一个static values()方法(返回枚举类所有对象的数组),方便遍历所有枚举对象;
所有枚举类都提供一个静态valueOf(字符串名称)方法来返回其对象名称等于枚举类中的名称的对象。
例如:公共枚举颜色{
红色()、绿色(){}、蓝色{ };
}
包审查演示;
//枚举
枚举颜色{
绿色、蓝色、黄色;
@覆盖
公共字符串toString() {
string ret=super . tostring();
开关(这){
绿色外壳:
Ret= green
打破;
蓝色外壳:
Ret= blue
打破;
案例黄色:
Ret= yellow
打破;
默认值:
打破;
}
返回ret
}
}
类别人员p{
颜色c=颜色。蓝色;
void show(){
system . out . println(c);
}
}
公开课演示18 {
公共静态void main(String[] args) {
color[]color=color . values();
对于(颜色c:颜色){
system . out . println(c);
}
新人员p()。show();
}
}输出:
绿色的
蓝色
黄色
蓝色
枚举以两种方式重写接口抽象方法:
在枚举类中实现接口的抽象方法;
枚举抽象方法以实现匿名内部类中的接口;
接口I{
void show();
}
枚举颜色实现I{
红色(){
公共void show(){
}
},绿色
公共void show(){
}
},蓝色
公共void show(){
}
};
}
枚举颜色实现I{
红色(),绿色,蓝色;
公共void show() {
}
} Summary:枚举不能是new();连反思都不允许!
注意:如果一个类没有构造函数,那么一定有对应的方法来获取对象!
这就是我想写和解释的关于面向对象的全部内容。如有不妥,请联系指正。谢谢你
更多信息请访问PHP中文网:JAVA视频教程。以上是java——面向对象详细介绍(三)的详细内容。更多信息请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。