首页 > 代码库 > Java继承改进

Java继承改进

一.java继承改进

首先,多继承的缺点:
1.继承多个父类,父类中方法名相同,产生歧义
2.父类中方法同名,子类未覆盖,也会歧义


所以,java改进,类只能单继承,接口可以多继承
接口中只有抽象方法和静态常量
1.抽象方法只能在实现接口类中实现,调用时调用实现类的方法
2.静态变量在编译期间将确定调用关系了,存在冲突也会在编译的时候提示错误
,而且引用变量一般直接使用类名或接口名,避免产生歧义。

 

1.1继承的初始化

继承关系是传递的。如,类C继承类B,类B继承类A,则类C既有从类B继承下来的变量和方法,也有从类A中继承下来的变量和方法,也可以有自己的变量和方法。继承下来的变量和方法尽管是隐式的,但仍是C的变量和方法。

构造方法是按照先超类后子类的方法进行的,所有超类会在子类访问它之前进行正确的初始化。

1.2super关键字

/*
super关键字
1.定义父类(Father)类
2.定义son类extends Father类
3.创建Son类对象
注意:
1.this和super很像,只能在有对象的前提下使用,不能在静态上下文使用
2.子类的构造函数默认第一行会调用父类无参数构造函数,隐式语句,super(),
  如果父类无参数构造函数不存在,编译报错
3.构造函数间的调用智能放在第一行,只能调用一次。super()和this()不能同时存在构造函数第一行
题目
如果开发者自定义了一个类,没有显示的进行类的继承,那么该类中成员函数是否可以使用super关健健字?
答案:可以使用,继承了Object类,Object类是所有类的父类。

重载(overload)和重写(override)
重载:
    前提:所有重载函数必须在同一个类中
    特点:函数名相同,参数列表不同,其他无关(访问控制符,返回值类型)
重写:
    前提:继承
    特点:函数名相同,参数列表相同
    子类的返回值类型要小于或等于父类的返回值类型
*/
class Super
{
    public static void main(String[] args) 
    {
        Son bigHead=new Son(11);
        bigHead.run();
        System.out.println("Hello World!");
    }
}

class Father
{
    int x=1;

    Father()
    {
        System.out.println("这是父类无参数构造");
    }

    Father(int x)
    {
        this.x=x;
        System.out.println("这是父类有参数构造");
    }

    void speak()
    {
        System.out.println("我是父亲");
    }
}

class Son extends Father
{
    int y=0;

    Son()
    {
        System.out.println("这是子类无参数构造");
    }

    Son(int y)
    {
        this.y=y+x;
        System.out.println("这是子类有参构造函数");
    }

    void run()
    {
        super.speak();        //访问父类的函数
        System.out.println("我是儿子"+"今年"+y+"岁");
    }
}

 

Java继承改进