Java---05---继承

来源:互联网 发布:mac照片怎么删除 编辑:程序博客网 时间:2024/05/16 14:50

继承:

继承是对针对类之间的相交关系,使得某类可以继承另外一个类的特征和功能。被继承的现有类称之为父类(基类或超类),从现有类继承的新类称之为子类(或派生类)。由一个类可以派生出多个子类,这样就形成了类的层次关系。继承意味着“自动的拥有”。即特殊类(对象)中不必重新定义一般类中以存在的属性和行为。

 

继承的作用:

1.清晰的体现类之间的结构层次关系

2.减少代码和数据的重复,增强可用性。

 

JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,

同时一个类可以实现多个接口,从而克服单继承的缺点。

 

子类不能继承父类中访问权限为private的成员变量和方法。

 

子类可以重写父类的方法,及命名与父类同名的成员变量。

 

例如:

 

class A{public int num;public A() {super();// TODO Auto-generated constructor stub}public A(int num) {super();this.num = num;}public int  show (){System.out.println("A.show()  num:"+num);return 0;}}class B extends A{public int num;public B() {super();// TODO Auto-generated constructor stub}public B(int num) {super();this.num = num;}public int show (){System.out.println("B.show()  num:"+num);return 0;}}class Main{public static void main (String[] args){A a = new A(10);B b = new B(20);a.show();b.show();}}


 

A类中已经有了 num 变量和 show() 方法,在子类B中仍然可以再定义一样的变量和方法。

 

Java类中的限定词:

 

    private:类中限定为private的成员,只能被这个类本身访问。如果构造方法为private,则其他类不能实例化该类。

 

    default:不加任何访问权限,可以被这个类本身和同一个包中的类访问。

 

    protected:类中限定为protected的成员,可以被这个类本身、它的子类和同一个包中的其他类访问。

 

    public:类中被限定为public的成员,可以被所有类访问。

 

 

父类中的成员被子类继承后,在子类中的访问控制方式与父类中相同,

子类虽然继承了父类的私有成员,但在子类中不能直接访问。

 

如果子类中出现非私有的同名成员变量时

子类要访问本类中的变量,用this

子类要访问父类中的同名变量,用super

 

supe的使用和this的使用几乎一致,

this代表的是本类对象的引用

super代表的是父类对象的引用

 

 

 class AA{int num ;public AA(int num) {super();this.num = num;System.out.println("AA.AA()  num = "+num);}} class BB extends AA{public BB(int num) {super(num);// TODO Auto-generated constructor stub}}public class Go {public static void main (String[] args){AA a = new AA(10);BB b = new BB(20);}}

 

输出结果为:

AA.AA()  num = 10

AA.AA()  num = 20

 

通过这个输出结果就能明确的知道 super 代表的是父类对象的引用。

当程序生成一个BB类的对象b同时调用BB的构造函数时,执行super(num)相当于执行AA的构造函数。

 

方法重写:

 

方法重写也称为方法的覆盖或方法重定义,重写是指在子类定义一个与父类某个方法完全相同的函数。函数名,参数,返回值完全相同。

 

第一个例子中的show()方法就是方法重写。

 

注意:

1.子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败;

2.静态只能覆盖静态;

3.覆盖必须一模一样,包括返回值。

 

 

class A{public int  show (){System.out.println("A.show() ");return 0;}}class B extends A{public int show (){System.out.println("B.show() ");//该函数没有返回值,所以编译不通过}}

 

 

 

 

 

 

 

 

0 0
原创粉丝点击