- 继承
- 封装/隐藏
- 多态
一、继承:
- 类是对对象的抽象,继承是对某一批类的抽象,(OOD)从而现实对现实世界更好的建模
- 提高代码的复用性!(OOP)
- extends的意思是“扩展”。子类是父类的扩展。
现实生活中,构建关于动物之间的模型,动物的种类的很多,我们会依赖继承的关系来构建。(如下所示),对动物模型的分类,更加方便我们认识动物世界。
对于动物世界的简单分类,我们分类哺乳动物(mammal)和爬行动物(paxing)
<span style="font-size:18px;"> <span style="color:#ff0000;"><strong>简单构建动物世界模型:哺乳动物和爬行动物</strong></span></span>
/**
* 测试继承
* 简单构建动物世界模型:哺乳动物和爬行动物
* @author dell
*
*/
public class Animal /*extends Object*/ {
String eye;
public void run(){
System.out.println("跑跑!");
}
public void eat(){
System.out.println("吃吃!");
}
public void sleep(){
System.out.println("zzzzz");
}
public Animal(){
super();
System.out.println("创建一个动物!");
}
}
// mammal 哺乳动物
class Mammal extends Animal {
public void taisheng(){
System.out.println("我是胎生动物");
}
}
//paxing 爬行动物
class Paxing extends Animal {
public void eggSheng(){
System.out.println("我是卵生动物");
}
}
继承小结:
- 子类继承父类,可以得到父类的全部的属性和方法(除了父类的构造方法)。
- java只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难以维护。就像 我们现实中,如果你有多个父母亲,那是一个多么混乱的世界。多继承,就是为了实现代码的复用性,却引入了复 杂性,使得系统之间的关系混乱。
- java的多继承,可以通过接口来实现!(接口后期我们会学习)
- 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object
- 不同的叫法:超类 父类 基类 子类 派生类
继承第二个特点:方法的重写(override)
- 在子类中可以根据需要对从基类中继承来的方法进行重写
- 重写的方法必须和被重写方法具有相同方法名称、参数列表和返回类型
- 重写方法不能使用比被重写方法更严格的访问权限(由于多态)
- 重写的方法必须和被重写方法具有相同方法名称、参数列表和返回类型,但是实现内容不一样
- 重写方法不能使用比被重写方法更严格的访问权限(由于多态)
<span style="font-size:18px;">/**
* 测试继承第二个特点:方法的重写
* @author dell
*
*/
public class Animal /*extends Object*/ {
public void run(){
System.out.println("跑跑!");
}
}
//paxing 爬行动物
class Paxing extends Animal {
public void run(){
System.out.println("爬行!");
}
}</span>
从上面我们可以看得出来,Paxing类继承Animal类,Paxing类中重写了Animal类中的run()方法。
二、Object类
Object类是所有Java类的根基类
如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
我们先熟悉Object中的toString方法:
默认返回:包名+类名+@+哈希吗(根据对象内存位置生产,唯一不重复)
<span style="font-size:18px;">/**
* 熟悉Object类中toString的方法
* @author Dell
*
*/
public class TestObject {
public static void main(String[] args) {
Object obj = new Object();
Object obj2 = new Object();
System.out.println(obj.toString());
System.out.println(obj2.toString());
System.out.println(obj==obj2);
System.out.println(obj.equals(obj2));
}
}</span>
运行结果:
java.lang.Object@55e6cb2a
java.lang.Object@23245e75
false
false
接下来我们重写:toString方法:
<span style="font-size:18px;">public class Mobile {
public String toString(){
return "我是一部移动电话";
}
public static void main(String[] args){
Mobile mobile = new Mobile();
System.out.println(mobile.toString());
}
}</span>
显示结果:我是一部移动电话
Mobile类默认继承Object类,实现Object类中toString方法的重写
本文参考:非常感谢北京尚学堂高琪老师!!!