2021-04-06

学习java第十天

Java的继承机制
第一:java里的类不能多重继承,如果一个类一旦继承了它的父类,那么它就别想再继承别的类。一个儿子只能有一个老爸,原本设计是没错的。可是在实际应用中,就会出现各种问题。

第二:java里有更好的接口,接口从本质上来说可以更好的代替继承。实现像C++里一样的宏定义的功能,把你想要的东西都抽象在接口里,让具体的类去实现这些功能。
继承的说明:
子类可以继承父类的东西:

1.当子类和父类在同一个包中时,子类继承父类的:public、protected、默认 访问级别的成员变量和成员方法。

2、当子类和父类在不同的包时,子类继承父类:public、protected 访问级别的成员变量和成员方法。
抽象方法
1、抽象(abstract)的使用

当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]。

我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化。这样,抽象类也就诞生了。

例如,定义了“动物”父类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫”的方法没有明确,此时就可以将“动物叫”定义为抽象方法。

所以,抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类。
  
2、用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。

3、抽象方法不能有方法主体。格式如下:

abstract void xxx();

4、抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。

5、抽象类中不一定要包含abstrace方法。也就是了,抽象中可以没有abstract方法。

6、一旦类中包含了abstract方法,那类该类必须声明为abstract类。
注意:

1.抽象类不能直接被使用,不能直接实例化。

2.必须用一个子类来继承抽象的父类。

3.子类必须覆盖重写,抽象父类中的所有抽象方法。

4.一个抽象类不一定含有抽象方法,但是一个有抽象方法的类一定是抽象类。
例题1

package com.hg.day010.demo02;

public abstract class Animal {
    public Animal() {
        System.out.println("抽象父类中的构造方法");
    }

    public abstract void eat();

    public abstract void food();

    public void normalMehted() {

    }
}
package com.hg.day010.demo02;

public class Cat extends Animal{
    public Cat(){
        super();
        System.out.println("子类中的构造方法");
    }

    @Override
    public void eat(){
        System.out.println("猫吃鱼");
    }

    public void food(){

    }
}
package com.hg.day010.demo02;
//一个抽象类 不一定含有抽象方法
//但是 一个有抽象方法的类 一定是抽象类
public abstract class MyAbstract {
    public void sleep() {

    }
}
package com.hg.day010.demo02;

public class Demo02Main {
    public static void main(String[] args) {
        //Animal animal = new Animal();

        Cat cat = new Cat();
        cat.eat();
    }
}

例题2

package com.hg.day10.demo03;

public abstract class Animal {
    public Animal() {
        System.out.println("抽象父类中的构造方法");
    }

    public abstract void eat();

    public abstract void sleep();

}
package com.hg.day10.demo03;

public abstract class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}
package com.hg.day10.demo03;

public class Dog2ha extends Dog{
    @Override
    public void sleep() {
        System.out.println("二哈 咬坏东西 睡觉");
    }
}
package com.hg.day10.demo03;

public class DogGolden extends Dog{

    @Override
    public void sleep() {
        System.out.println("直接 站着睡觉");
    }

}
package com.hg.day10.demo03;

public class Demo03Main {
    public static void main(String[] args) {
        //Animal animal=new Animal();
        //Dog dog = new Dog();

        Dog2ha ha2=new Dog2ha();
        ha2.eat();
        ha2.sleep();

        System.out.println("============");
        DogGolden golden=new DogGolden();
        golden.eat();
        golden.sleep();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值