java中类的继承

我们都知道java的四大特性:抽象、继承、封装、多态;

那么关于继承有哪些特性呢?下面看具体实例:

(1)

public class Person {  

public  int a=2;  

public  void see(int a){   

System.out.println(a);

 }

}

public class Hello extends Person {

public int a = 3;

public void see(int s){

 System.out.println("11");

}  public static void main(String[] args){   

Person a1 = new Person();   

System.out.println(a1.a);  //a1.a的值由声明类型决定,所以值是2

a1.see(1);  //调用的方法由引用对象的类型决定,这里对象是子类的对象,所以值是11,总结:属性绑定到类型,方法绑定到对象!

}  

}

(1)继承成员变量

当子类继承某个类时,子类就可以使用这个类的成员变量,但不是完全继承这个类中所有的成员变量,具体原则如下:

<1>子类能够继承父类的public、protected、default 修饰成员变量,不能继承private修饰的成员变量

<2>对于子类可以继承父类的成员变量,如果子类出现了同名的成员变量,那么子类就会屏蔽掉父类的成员变量,如果想调用父类的成员变量,就需要用到super关键字

(2)继承方法

当子类继承某个类时,子类就可以使用这个类的方法,但不是完全继承这个类中所有的方法,具体原则如下:

<1>子类能够继承父类的public、protected、default 修饰方法,不能继承private修饰的方法

<2>对于子类可以继承父类的方法,如果子类出现了同名的方法,那么子类就会屏覆盖父类的成员变量,如果想调用父类的成员变量,就需要用到super关键字,子类重写的方法的修饰符权限要大于父类的方法访问权限

总结:
程序运行时(一个类中),会第一时间加载运行静态代码块,一旦创建对象,就会执行非静态代码块以及无参构造方法。 而在继承中,程序运行时 会先加载父类中静态代码块 然后加载本身静态代码块,一旦创建对象(运用子类构造方法创建),就会调用 父类非静态代码块,父类构造方法,然后就是本身 非静态代码块,本身构造方法

抽象类和接口的区别:

抽象类只能被继承,而且只能被单继承,接口需要被实现,而且可以多实现

抽象类中可以有非抽象方法也可以没有抽象方法(抽象类中可以没有抽象方法,但是有抽象方法的类肯定是抽象类),接口中全部都是抽象方法

抽象类的成员修饰符可以自己定义,接口中不能是private

----

继承:在方法覆盖时注意2点:

1、覆盖的方法修饰符权限不能小于比父类的方法权限

2、方法必须是全部静态或全部非静态

 多态的弊端:父类的引用指向子类的对象,虽然提高了扩展性,但是只能方法父类具有的方法,不可以访问子类特有的方法

多态在成员变量和成员方法中的体现:

成员变量看编译运行左边

成员函数看编译看左边 运行看右边--覆盖

静态成员函数编译运行看左边--静态方法不属于对象 属于类

--也就是说静态函数和成员变量,静态成员变量原理一样

原文地址:https://www.cnblogs.com/muliu/p/5504216.html