美文网首页
继承 多态 接口

继承 多态 接口

作者: newdolphintime | 来源:发表于2015-10-10 16:19 被阅读67次

类的继承

class Test{
    public Test(){
        //构造方法
        }
    protected void doSomething(){
        //成员方法
    }
       protected Test doIt(){
        //方法返回值类型为Test类型
        return new Test();
    }
}
class Test2 extends Test{//继承父类
    public Test2(){
        super();//调用父类构造方法
        super.doSomething();//调用父类成员方法
    }
    public void doSomething(){
        //重写父类方法
    }
    protected Test2 doIt(){
        //重写父类方法 返回值类型为Test2类型
        return new Test2();
       }
}

子类可以在其构造方法中使用super()语句调用父类的构造方法 也可以在子类中使用super关键字调用父类的成员方法

但是子类没有权限调用父类中被修饰private的方法 只可以调用修饰为public protected的成员方法

继承并不只是拓展父类的功能 还可以重写父类中的方法

在继承中还有一种特殊的重写方式 子类与父类的成员方法返回值 方法名称 参数类型以及个数 完全相同 唯一不同的是方法实现内容 这种特殊重写方法被称为重构

重写方法时不能降低方法修饰权限的范围

在实例化子类对象时 JAVA编译器会在子类的构造方法中自动调用父类无参构造方法

实例化子对象时首先要实例化父类对象 然后再实例化子类对象 所以在子类构造方法访问父类的构造方法之前 父类已经完成实例化操作

类的多态

多态==晚绑定。

不要把函数重载理解为多态。

因为多态是一种运行期的行为,不是编译期的行为。

多态:父类型的引用可以指向子类型的对象。

比如 Parent p = new Child();

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的该同名方法。

注意此处,静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的引用,则调用谁的版本。

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        AAA a=new BBB();
        System.out.println(a.i);//结果 5
        BBB b=new BBB();
        System.out.println(b.i);//结果 6
    }
}
class AAA{
    static int i=5;
}
class BBB extends AAA{
    static int i=6;
}

如果想要调用子类中有而父类中没有的方法,需要进行强制类型转换,如上面的例子中,将p转换为子类Child类型的引用。

因为当用父类的引用指向子类的对象,用父类引用调用方法时,找不到父类中不存在的方法。这时候需要进行向下的类型转换,将父类引用转换为子类引用。

public class PolyTest
{
    public static void main(String[] args)
    {

        //向上类型转换
        Cat cat = new Cat();
        Animal animal = cat;
        animal.sing();//结果 Cat is singing!


        //向下类型转换
        Animal a = new Cat();
        Cat c = (Cat)a;
        c.sing();//结果 Cat is singing!
        c.eat();//结果 Cat is eating!


        //编译错误
        //用父类引用调用父类不存在的方法
        //Animal a1 = new Cat();
        //a1.eat();

        //编译错误
        //向下类型转换时只能转向指向的对象类型
        //Animal a2 = new Cat();
        //Cat c2 = (Dog)a2;

        //编译错误
        //抛出异常:Cat cannot be cast to Dog
        Animal a2 = new Cat();
        Dog c2 = (Dog)a2;
        c2.sing();
     }
}
class Animal
{
    public void sing()
    {
        System.out.println("Animal is singing!");
    }
}
class Dog extends Animal
{
    public void sing()
    {
        System.out.println("Dog is singing!");
    }
}
class Cat extends Animal
{
    public void sing()
    {
        System.out.println("Cat is singing!");
    }
    public void eat()
    {
        System.out.println("Cat is eating!");
    }
}

类的接口

public interface example{
    void draw();
}
在接口中定义的方法必须被定义为public或abstract形式 其他修饰权限不被JAVA编译器认可 即使不讲该方法声明为public形式 默认也是public
接口定义的任何字段都是static和final
使用接口可以实现多重继承

相关文章

  • 程序组第二次作业代码

    继承与多态: 接口作业:

  • 继承 多态 接口

    类的继承 子类可以在其构造方法中使用super()语句调用父类的构造方法 也可以在子类中使用super关键字调用父...

  • Java多态的具体体现

    面向对象编程有四;个特征:抽象,封装,继承,多态。 多态有四种体现形式: 1. 接口和接口的继承。 2. 类和类的...

  • 第二次作业

    继承与多态代码: 运行: 接口代码: 运行: trait代码: 运行:

  • 接口,继承与多态

    类的继承 1.重写父类的方法时,不能降低方法的修饰权限访问,可以修改方法的返回值类型,返回值类型必须是父类中返回值...

  • 接口、继承和多态

    1、super 这是一个和父类相关的关键字,在构造函数中调用父类构造函数、调用父类的方法或者成员变量都要用到它。 ...

  • 第四天

    一、面向对象编程 1、特性 没有封装、继承、多态 封装通过方法实现 继承通过匿名字段实现 多态通过接口实现 2、继...

  • 文本查询程序

    //面向对象的核心是,抽象继承多态。抽象把数据实现隐藏,暴露公共接口继承和多态,派生类继承基类,降低代码重复性,通...

  • 编程第三周的日常<二>

    接口与多态 接口 一种特殊的类,是一种抽象类的延伸。 接口之间允许继承而且允许多重继承---一个接口可以继承多个接...

  • 天外天学习第二次作业

    作业1:继承多态与接口 运行截图 作业2:trait 运行截图

网友评论

      本文标题:继承 多态 接口

      本文链接:https://www.haomeiwen.com/subject/ivnncttx.html