Java继承(1)
继承的概念
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
继承的特点
1、继承的关键字为extends
试举一例吧:
class Dad{
public void Sleep(){}
public void Eat(){}
}
class Son extends Dad{
public void Cry(){}
}
这样我们就可以很清晰明了的看出来,我们建立的Son类,成功的继承了Dad类。其实继承与我们生活中的继承也是有很大的相似之处的,就比如上面写到的,Dad会Sleep(睡觉)和Eat(吃饭),而一开始只会Cry(哭)的Son继承他之后,也学会了吃饭和睡觉,这是一样的道理。
这里还要提一点哦,java中只能支持单继承!如下面这种情况
Class Xiaoming extends Daming,Laowang{}
这是不行的。由于这段代码中,子类Xiaoming继承于两个父类,也就是Daming和Laowang,所以会出现错误!通俗来说,子类和我们一样,只能有一个亲生爸爸,不能有“Laowang”噢。
2、子类只能继承父类中所有非私有的成员。这个很容易理解啦,如果父类的成员变量,成员方法前面加了private,子类就不能继承。(和爸爸的零花钱一样哦,我们总是不知道在哪里。)
3、继承中成员变量的不同情况
-如果说子类中的成员变量名要是和父类中的成员变量名不一样,那么我们可以直接使用父类的成员变量,没有问题。但是,
-如果说子类中的成员变量名要是和父类中的成员变量名一样,在子类方法中访问我们就需要按照一定的顺序了:
在子类的局部范围找,看有没有,有就用
在子类的成员位置找,看有没有,有就用
在父类的成员位置找,看有没有,有就用
如果还没有就会报错(没有考虑父类的父类)
具体的代码如下哦:
class Dad{
public int num = 5;
//父类的成员变量
public void method(){
int num = 55;
}
//父类的局部方法加粗样式
}
class Son extends Dad{
//public int num = 555;
//如果在成员变量中定义num,那么输出的就是555
public int num2 = 6;
public void show(){
//int num = 5555;
//如果在成员方法中定义num,那么输出的就会是5555
System.out.println(num);
//如果在子类中都没有定义num,那么输出的就是父类中的5
System.out.println(num2);
}
}
class Demo1{
public static void main(String[] args){
Son s = new Son();
s.show();
}
}
4、补充第3点,那可能有人会有疑问,如果我就想跳过子类的局部变量使用子类的成员变量,或者我就想跳过子类的局部变量来使用父类的成员变量。那该怎么办?
不用担心!还是有办法的!
这里就要派出两个关键词了,this 和 super
class Dad{
public int num = 5;
public void method(){
int num = 55;
}
}
class Son extends Dad{
public int num = 555;
public int num2 = 6;
public void show(){
int num = 5555;
System.out.println(num);
//这里输出的是成员方法中的局部变量5555
System.out.println(this.num);
//这里输入的是子类的成员变量555
System.out.println(super.num);
//这里输入的是父类的成员变量5
}
}
class Demo1{
public static void main(String[] args){
Son s = new Son();
s.show();
}
}