Object
含义:基类也叫做超类,Object是所有类的祖先类
注意:如果一个类没有明确继承的父类,默认继承Object
equals:比较两个对象内存地址是否相同
hashCode():获取对象的hash值
注意:1.hash码是内存地址+散列算法得到的一个数字
2.hash码不等于内存地址
3.hash码可能相同
getClass:获取类的字节码文件对象
使用到类,该类的class文件会加载到方法区,同时在类中创建class文件的对象,再通过对象找到class文件的访问入口(JVM不能直接访问class文件)
toString:获取对象的字符串表示
String判断两个字符串的逻辑:
1.先判断两个字符串对象的内存地址是否一致
2.再判断两个字符串数组的长度是否一致
3.循环判断字符串数组里的字符码值是否一致
标杆作用:Object作为所有类的父类,定义了几个方法,方便子类去重写
equals的标杆作用:比较两个对象是否相同,不同的对象比较规则不一样,所以子类重写即可
toString的标杆作用:每个子类都有不同的属性,重写toString直接打印该对象中所有的属性,方便观察数据
final
含义:最终
作用:
修饰类:该类不能被继承
修饰方法:该方法不能被重写
修饰变量:变成常量,不能重新赋值
常量的命名规则:全大写,单词之间用下划线隔开
常量的生命周期:存在常量池中,直到项目结束才会被销毁
抽象类及抽象方法(abstract)
//抽象类 public abstract class 类名{ //抽象方法 public abstract void method(); }
为什么需要有抽象类
父类是代表众多子类的共同特征,父类中的成员变量(即属性)、成员方法(即功能)是所有子类都有的。
当事物的分类层次变多之后,越上层的父类成员越少,越上层的父类会变的越来越抽象。甚至出现在父类中某个方法无法给出适用于所有子类的方法体实现。
例如:定义图形Graphic,所有图形都有求面积的方法area(),但是所有的子类:Rectangle矩形、Circle圆形、Triangle三角形等,它们的求面积公式都不相同,所以在父类图形Graphic中,area()没法给出具体的代码,因为没有一个通用的公式。
通常这样的方法,会被定义为抽象方法。抽象的关键字:abstract
【①其他修饰符】 abstract ②返回值类型 ③方法名(【④形参列表】); //没有方法体, 它是抽象方法
Java中规定,凡是包含抽象方法的类,必须是抽象类。
【其他修饰符】 abstract class 类名{ //抽象类 }
package com.atguigu.special; public abstract class Graphic { public abstract double area(); }
抽象方法交给非抽象的子类去实现(重写)
应用场景:当一个方法必须在父类中出现,但是这个方法又不好实现,就把该方法变成抽象方法,交给非抽象的子类去实现
面试题: 1.抽象类不能有构造方法?
抽象类可以有构造方法
2.抽象类中只能有抽象方法?
抽象类中有非抽象方法(成员方法和静态方法)
3.抽象类中不可以没有抽象方法?
抽象类中可以没有抽象方法,但是毫无意义
4.如果父类是抽象类,则子类必须实现父类的抽象方法?
不一定,子类如果是抽象类,可以不实现父类的抽象方法
5.可以使用new关键字来创建抽象类对象?
不可以,创建的是匿名内部类的对象
接口(interface)
为什么要有接口?
需求:
-
定义一个Animal抽象父类,包含抽象方法eat
-
定义一个非抽象的子类Bird,继承Animal,重写抽象方法eat,新增一个fly()
-
定义一个非抽象的子类Fish,继承Animal,重写抽象方法eat,新增一个swim()
-
定义一个非抽象的类Plane(飞机),没有继承Animal,也有一个方法fly()
问题1:Bird与Plane有相同的功能方法,fly方法,它应该被抽取它们的共同的父类中,但是Bird已经有一个直接父类Animal了,不能再继承另一个父类了?
原因:Java的类有单继承的限制。
解决:突破单继承的限制。需要引入接口的概念,来解决单继承的限制问题。
问题2:类与类之间需要是is-a的关系。例如Student is a Person。当某些类虽然有共同的方法,但是它们不适用用一个公共的父类来作为它们的总的分类。
原因:父类与子类应该是逻辑上属于一个事物类别,只是子类是更加具体的一个子类别。例如:学生是人这个大类别中的一个子类别,狗、鸟是动物这个大类别中的子类别。但是鸟、飞机、热气球、风筝等很难找到一个公共的事物分类。
解决:需要引入接口的概念,来突破is-a的关系。
定义接口:
【修饰符】 interface 接口名{ //成员 }
接口的特点和要求
1、接口是抽象的,不能直接new对象
2、接口是用来被“实现的”,需要重写抽象方法
3、接口的成员与类的成员有大不同
含义:特殊的抽象类
注意:
JDK1.7时,接口中只能有静态常量和抽象方法
JDK1.8开始,接口中添加了静态方法和默认方法
应用场景:接口更像一个规范
抽象类 vs 接口
抽象类:成员变量、静态变量、静态常量、成员方法、静态方法
接口:静态常量、静态方法(JDK1.8)、默认方法(JDK1.8)
面试题:
1.一个类可以实现多个接口?可以
2.一个接口可以实现多个接口?不可以,接口与接口的关系是多继承
3.接口里面的方法不一定都是抽象的?JDK1.7时接口里只能有抽象方法,JDK1.8时接口可以有抽象方法和默认方法
4.接口解决了类的单继承问题?是的,因为类与类是单继承,类与接口是多实现
5.一个类是否可以继承一个类并同时实现多个接口?可以
6.接口可以new对象?接口是特殊的抽象类,但是本质还是抽象类,抽象类是不可以new对象的,接口也是不能new对象,new出来的匿名类内部类的对象
标签:java,子类,基础,接口,Day14,抽象,抽象类,父类,方法 From: https://blog.csdn.net/2301_81594623/article/details/143213443类 - 接口的关系:
类 - 类:单继承
类 - 接口:多实现
接口 - 接口:多继承