Java中的继承、覆盖与重载

在Java中通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),继承产生的新的类称为子类(派生类)。Java不允许多继承。
1.继承

class Animal{
    void eat(){
        System.out.println("Animal eat");
    }
    void sleep(){
        System.out.println("Animal sleep");
    }
    void breathe(){
        System.out.println("Animal breathe");
    }
}

class Fish extends Animal{

}

public class TestNew{

    public static void main(String[] args) {
        //继承了父类的所有方法
        Animal an = new Animal();
        Fish fn = new Fish();

        an.breathe();
        fn.breathe();
        
     }
 }

运行之后的结果为:
Animal breathe
Animal breathe

2.覆盖

class Animal{
    void eat(){
        System.out.println("Animal eat");
    }
    void sleep(){
        System.out.println("Animal sleep");
    }
    void breathe(){
        System.out.println("Animal breathe");
    }
}

class Fish extends Animal{
    void breathe(){
        System.out.println("Fish breathe");
    }

}

public class TestNew{

    public static void main(String[] args) {
        //继承了父类的所有方法
        Animal an = new Animal();
        Fish fn = new Fish();

        an.breathe();
        fn.breathe();
        
    }
}

运行之后的结果为:
Animal breathe
Fish breathe

如果在子类中定义一个跟父类相同的函数,也即在子类中定义一个与父类同名,返回类型,参数类型均相同的一个方法,称为方法的覆盖。方法的覆盖发生在子类和父类之间。

3.一个例子(继承Thread类)

public class Example extends Thread{
     @Override
     public void run(){
        try{
             Thread.sleep(1000);
             }catch (InterruptedException e){
             e.printStackTrace();
             }
             System.out.print("run");
     }
     public static void main(String[] args){
             Example example=new Example();
             example.run();
             System.out.print("main");
     }
}

这个类虽然继承了Thread类,但是并没有真正创建一个线程
创建一个线程需要覆盖Thread类的run方法,然后调用Thread类的start()方法启动,这里直接调用run()方法并没有创建线程,跟普通方法一样调用一样,是顺序执行的。

4.重载
如果有两个方法的名称相同,但参数不一致,这样一个方法是另一个方法的重载。
方法名相同方法的参数类型,个数顺序至少有一项不同

你可能感兴趣的:(Java中的继承、覆盖与重载)