Java三大特性之继承
1、什么是继承,有什么用?
继承的作用:
1. 基本作用:子类继承父类,代码可以得到复用。(这个不是重要的作用,是基本作用。)
2. 主要(重要)作用:因为有了继承关系,才有了后期的方法覆盖和多态机制。
继承也是存在缺点的:耦合度高,父类修改,子类受牵连。
语法格式:
class A extends B{
}
2、继承的相关特性
① B类继承A类,则称A类为超类(superclass)、父类、基类,
B类则称为子类(subclass)、派生类、扩展类。
class A{}
class B extends A{}
我们平时聊天说的比较多的是:父类和子类。
superclass 父类
subclass 子类
② java 中的继承只支持单继承,不支持多继承,C++中支持多继承,这也是 java 体现简单性的一点, 换句话说,java 中不允许这样写代码:
class B extends A,C{
} //这是错误的。
③ 虽然 java 中不支持多继承,但有的时候会产生间接继承的效果,
例如:class C extends B,class B extends A,也就是说,C 直接继承 B,
其实 C 还间接继承 A。
④ java 中规定,子类继承父类,除构造方法不能继承之外,剩下都可以继承。但是私有的属性无法在子类中直接访问。(父类中private修饰的不能在子类中直接访问。可以通过间接的手段来访问。)
⑤ java 中的类没有显示的继承任何类,则默认继承 Object类,Object类是 java 语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有 Object类型中所有的特征。
class A {
}
//实际上是这样的
class A extends Object{
}
⑥ 继承也存在一些缺点,例如:CreditAccount 类继承 Account 类会导致它们之间的耦合度非常高,Account 类发生改变之后会马上影响到 CreditAccount 类.
3.子类继承父类之后,能使用子类对象调用父类方法吗? 可以,因为子类继承了父类之后,这个方法就属于子类了。 当然可以使用子类对象来调用
注意:
测试:子类继承父类之后,能使用子类对象调用父类方法吗?
实际上以上的这个问题问的有点蹊跷!!!!!
哪里蹊跷?“能使用子类对象调用父类方法”这一句话蹊跷
本质上,子类继承父类之后,是将父类继承过来的方法归为自己所有。
实际上调用的也不是父类的方法,是他子类自己的方法(因为已经继承过来了
就属于自己的)。
eg.
public class Extends{
public static void main(String[] args){
// 创建子类对象
Cat c = new Cat();
// 调用方法
c.move();
// 通过子类对象访问name可以吗?可以
System.out.println(c.name);
}
}
// 父类
//class Animal extends Object {
class Animal{
// 名字(先不封装)
String name = "XiaoHua"; //默认值不是null,给一个XiaoHua
// 提供一个动物移动的方法
public void move(){
System.out.println(name + "正在移动!");
}
}
// Cat子类
// Cat继承Animal,会将Animal中所有的全部继承过来。
class Cat extends Animal{
}
4.什么时候使用继承?
凡是采用“is a”能描述的,都可以继承。
例如:
Cat is a Animal:猫是一个动物
Dog is a Animal:狗是一个动物
CreditAccount is a Account:信用卡账户是一个银行账户
…
假设以后的开发中有一个A类,有一个B类,A类和B类确实也有重复的代码,
那么他们两个之间就可以继承吗?不一定,还是要看一看它们之间是否能够
使用is a来描述。
eg.
class Customer{
String name; // 名字
// setter and getter
}
class Product{
String name; // 名字
// setter and getter
}
class Product extends Customer{
}
以上的继承就属于很失败的。因为:Product is a Customer,是有违伦理的。
5、任何一个类,没有显示继承任何类,默认继承Object,那么Object类当中有哪些方法呢?老祖宗为我们提供了哪些方法?
以后慢慢的大家一定要适应看JDK的源代码(多看看牛人写的程序自己才会变成牛人。)先模仿后超越。
java为什么比较好学呢?
是因为Java内置了一套庞大的类库,程序员不需要从0开始写代码,程序员可以基于这套庞大的类库进行“二次”开发。(开发速度较快,因为JDK内置的这套库实现了很多基础的功能。)
例如:String是SUN编写的字符串类、System是SUN编写的系统类。这些类都可以拿来直接使用。
JDK源代码在什么位置?
C:\Program Files\Java\jdk-13.0.2\lib\src.zip
你现在能看懂以下代码了吗?
System.out.println("Hello World!");
System.out 中,out后面没有小括号,说明out是变量名。
另外System是一个类名,直接使用类名System.out,说明out是一个静态变量。
System.out 返回一个对象,然后采用“对象.”的方式访问println()方法。
我们研究了一下Object类当中有很多方法,大部分看不懂,其中有一个叫做toString()的,我们进行了测试,发现:
System.out.println(引用);
当直接输出一个“引用”的时候,println()方法会先自动调用“引用.toString()”,然后输出toString()方法的执行结果。
注:S为引用!
System.out.println(S.toString());
等同于
System.out.println(S);

浙公网安备 33010602011771号