300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Java-面向对象之(抽象类+接口)

Java-面向对象之(抽象类+接口)

时间:2018-08-29 11:19:06

相关推荐

Java-面向对象之(抽象类+接口)

文章目录

一、抽象类1、什么是抽象类2、为什么会出现抽象类3、抽象类的语法 二、接口1、什么是接口2、为什么会出现接口3、接口的语法4、接口的特性1、接口之间的继承 5、接口的应用 三、抽象类和接口之间的区别四、Object类1、什么是Object类?1、equals方法2、hashCode方法3、toString方法

一、抽象类

1、什么是抽象类

向我们之前讲的类,比喻成了制造洗衣机的图纸,能够描述一个完整的洗衣机。

如果现在有一个类,它不能完整的描述一个对象,不能完整的描述一个洗衣机,那么它就被称为抽象类。

2、为什么会出现抽象类

如果一个类中的方法没有实际的代码块,没有具体的工作,具体的工作都是由重写这个方法中完成的,这个方法就被称为抽象方法,这个方法所在的类就被称为抽象类。在继承体系下,有些方法必须要进行重写,并且调用方法时,必须调用重写的方法,如果再在调用的时候,方法没有重写,那么肯定会调用父类的方法,为了防止这一错误发生,所以就产生了抽象类,继承抽象类,必须要重写方法,以防止方法没有被重写,而造成错误。

3、抽象类的语法

语法都是大部分是依据抽象方法出现的:

抽象方法和抽象方法被abstract修饰,抽象方法默认被public修饰抽象方法由于没有具体的工作,所以可以没有方法体由于抽象方法没有具体的工作,所以抽象类必须要被继承,继承之后的类要重写里面的抽象方法如果不想重写抽象方法,那么这个类也变成抽象类,因为这个类继承了抽象方法却没有重写,那么这个类也不能完整的描述一个对象如果再有一个类,继承了这个继承了抽象类的抽象类,那么这个类必须要重写里面的抽象方法,出来混,迟早要还的,既然你有胆量写出抽象方法,就要做好被重写的准备!抽象方法是要被重写的,所以不能被final,static,private修饰,要满足重写的规则(不熟悉重写的,看我上一篇关于面向对象之(封装+继承+多态)的文章)。抽象类中可以有抽象方法,也可以没有抽象方法,抽象类不太严格,比较佛系。由于具有抽象方法,使得这个类不能完整的描述一个对象,所以不能实例化,产生一个对象。抽象类也是类,也有普通的成员变量和成员方法抽象类中,由于不能实例化对象,也就不能初始化成员变量,所以我们可以自己写出构造方法,通过构造方法来初始化成员变量。

二、接口

1、什么是接口

为了理解接口,抽象出一个生活中的例子:像你的笔记本上的usb接口,或者电源插口,如果你的数据线或者充电器插头,满足插口的协议,也就可以使用这个usb接口和电源插口。

用Java知识去理解:usb接口和电源插口就是Java中的接口,接口就是一个规范,只要满足这个规范,就可以使用这个接口,接口就是多个类的公共规范,是一种引用数据类型。

2、为什么会出现接口

为了解决Java中不能实现多继承的问题为了解决在继承时,要关注类型,所以产生了接口

继承和接口都为了实现代码的复用

继承只能单继承,是子类只能继承一个父类,一个父类可以有多个子类,但当有子类需要的方法,父类中没有,并且由于是单继承,所以出现了接口,类可以实现多个接口。

只要符合接口这个规范,就可以实现这个接口,不要担心类型,忽略类型。

3、接口的语法

接口是一个比抽象类更抽象的特殊的类

接口使用interface关键词定义接口名使用大写的I开头,表示代表的是一个接口接口中默认的方法是抽象方法,且必须要有抽象方法,默认使用public abstract修饰,不能有普通的方法可以有default修饰的方法,也可以有static修饰的方法接口中的成员变量必须是public static final修饰由于有抽象方法,所以接口不能实例化出对象由于接口中默认的方法是被public abstract修饰,变量是被public static final修饰,所以为了代码的简洁,修饰符可以隐藏不写。在子类中重写接口中的抽象方法时,不能使用默认的访问修饰符,也就是default,因为接口中的方法的访问修饰符是public,所以为了满足重写的规则,必须是子类中重写的方法必须是public。由于接口中的变量被就地初始化了,所以不需要构造方法和静态代码块实现接口的子类必须重写接口中所有的抽象方法,如果不重写,就是抽象类,需要使用abstruct修饰。类实现接口时,使用关键字implements实现接口之间的继承使用关键字extens实现

4、接口的特性

1、接口之间的继承

为了实现代码的复用,不用每一次都要调用好几个接口,接口与接口之间可以继承,并且一个接口可以继承好几个接口,一个类可以实现好几个接口,但一个类只能继承一个类。

5、接口的应用

三、抽象类和接口之间的区别

四、Object类

1、什么是Object类?

人的祖先可能是炎黄大帝。

Object类就可以看作炎皇大帝,类就可以看作人,所有类的祖先是Object类,Object类是所有类的父类,所以Object类的对象的引用可以接收任何一个类的对象的引用,然后发生向上转型和动态绑定。

由于类只能继承一个类,所有当类继承了一个类之后,所以这个类就不会继承Object类,但被继承的类同样继承Object类。

1、equals方法

equals方法是Object类中的方法,用来判断两个数是否相等

如果使用默认的Object类的equals方法去比较对象相不相等,比较的是这两个对象的引用相不相等,引用是代表地址的一组数,由于Java为了安全,是不会将内存地址暴露出来的,所以对地址加密了,所以两个对象的引用肯定不相等,默认的equals方法不符合我们的逻辑。

所以应该在子类中重写equals方法,在equals方法体内编写符合我们逻辑的代码。

例如:创建一个自定义类,人这个类,实例化出两个人这两个对象,赋予两个对象名字和年龄,现在要比较这两个对象相不相等,就要比较名字和年龄相不相等。

手动重写equals方法:

对两个对象进行比较的思路:

一个对象的引用调用重写的equals,将另一个对象的引用作为参数传给equals

第一点:有可能这两个引用指向的是同一个对象,所以直接对这两个引用进行判断,如果相等,就是引用的对象是同一个,直接返回true即可。

第二点:有可能作为参数传给equals的引用和调用equals的引用的类型不是同一个类,也就意味着是对两个不同类型的对象在进行判断,那就没有可比性了。

第三点:如果作为参数传给equals的变量没有存放引用,是个空引用,那么直接返回false

第四点:最后传进去的引用都是正常的了,对名字和年龄进行比较,对名字进行比较也是调用equals,并且String类中也对equals方法重写,String类继承Object类,equals方法使用Object类接收参数,发生向上转型之后,才能调用String中重写的方法,名字是String类型的,String类型也是引用类型,和自定义类型一样。

判断年龄,年龄是具体的数,所以对两个变量进行判断即可。

使用idea编译器解放双手自动生成重写的方法:

第一步:

右击,点击Generate或者之间按快捷键:Alt+Insert

第二步:

点击图中第五行,一路点击next即可。

2、hashCode方法

3、toString方法

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。