Java中面向对象的特点(1):继承
在现实中通俗点所谓的继承就是儿子继承父亲的财产。然而在Java程序中,继承所描述的是事物之间的所属关系,通过继承将多种事物联系在一起。
比如说,多个类中有相同的成员和方法,我们可以将这几个类共有的抽取到另一个类中,让多个类(子类)去继承这个类(父类),多个类(子类)也可以获取到这个类(父类)的成员。
程序中要想声明继承关系,需使用关键字extends;
注意:
- 子类不能继承父类的私有成员
- 单一继承,即一个父类一个子类
- 父类可以有多个子类;
- 多层继承 比如B继承A,C继承B,此时C既是B的子类也是A的子类
继承中的成员变量特点:
- 如果子父类中的成员变量名相同时,创建子类 对象后,直接获取的是子类的成员变量,反之为父类
public class ExtendsDemon{
public static void main(String[] args){
Son s=new Son();
s.show; //输出大熊
}
}
class Dad{
String name="雄安";
}
class Son extends Dad{
String name="大熊";
public void show(){
System.out.println(name);
}
}
此时会用到就近原则:
- 如果有局部变量时使用的是局部变量`
public class ExtendsDemon1{
public static void main(String[] args){
Son1 s1=new Son1();
s1.show();
}
}
class Dad1{
String name="小熊";
}
class Son1 extends Dad1{
String name="熊大";
public void show(){
String name="熊二";
System.out.println(name);
}
}
- 如果没有局部变量,有子类的成员变量使用的是子类的
public class ExtendsDemon3{
public static void main(String[] args){
Son3 s3=new Son3();
s3.show();
}
}
calss Dad3{
String name="小雄";
}
class Son3 extends Dad3{
String name="熊大";
public void show(){
System.out.println(name);
}
}
- 如果没有局部变量和子类的成员变量,使用的是父类的
成员方法的特点:
- 子类中如果没有这个方法,则调用的是父类的;
- 子类重写这个方法后调用的是子类
继承中构造方法的执行顺序:
1.如果子类构造方法第一行没有调用父类构造或其他子类构造,则会先默认调用父类无参构造
public class ExtendsDemon4{
public static void main(String[] args){
Son4 s4=new Son4();
}
}
class Dad4{
public Dad4(){
System.out.println("我是父类无参构造");
}
public Dad4(String name){
System.out.println("我是父类有参构造");
}
}
class Son4 extends Dad4{
public Son4(){
System.out.println("我是子类无参构造");
}
public Son4(String name){
System.out.println("我是子类有参构造");
}
}
2.如果子类构造方法第一行调用的是当前对象的其他构造(A),则会先看(A)的第一行有没有调用父类构造,若无,则默认为无参构造
以下代码是对1的改写
class Son4 extends Dad4{
public Son4(){
this("大熊");
System.out.println("我是子类无参构造");
}
public Son4(String name){
System.out.println("我是子类有参构造");
}
}
//运行结果为我是父类无参构造----我是子类有参构造----我是子类无参构造
3.如果子类构造中第一行使用了super关键字,则会执行完父类构造,再执行子类,同上
class Son4 extends Dad4{
public Son4(){
super();
System.out.println("我是子类无参构造");
}
public Son4(Sring name){
System.out.println("我是子类有参构造");
}
}
//运行结果为 我是父类无参构造----我是子类无参构造