继承,方法的重写,super关键字

(1)继承是发生在多个类之间
(2)继承使用关键字extends
(3) JAVA只能单继承,允许多层继承
(4)被继承的类叫父类(超类),继承父类的类叫子类(派生类)
(5)在父类中的非私有属性和方法可以被子类继承
(6) protected(受保护的访问权限修饰符),修饰的属性或方法可以被子类继承
(7)构造方法不能被继承
(8)创建对象会调用构造方法,调用构造方法不一定就是创建对象
(9)实例化子类对象,会先调用父类的构造方法,如果父类中没有默认的构造方法,那么 子类必须显示的通过super..来调用父类的带参构造方法,super也只 能在子类构造方法中的第一句
继承的好处:
1、提高代码的复用性
2·提高代码的维护性
3、让类与类之间产生关系,是多态的前提继承的缺点:
增强了类与类之间的耦合性
开发原则:高内聚,低耦合

继承,方法的重写,super关键字_第1张图片
image.png

面试题:overloading和overriding的区别?
overloading:方法的重载,方法名相同,参数列表不同,与返回值无关,发生在同一个类中
overriding:方法的重写,发生在子父类中,方法名相同,参数列表相同,返回值相同,子类的访问修饰符要大于或等于父类的访问修饰符,子类的异常声明必须小于或等于父类的异常声明,如果方法被private,static,final修饰,那么不能被重写

继承,方法的重写,super关键字_第2张图片
image.png
image.png
/**
    继承:从已有的类创造新类的过程
    继承一个父类,只能继承非私有的数据(属性和方法)
    protected访问权限修饰符,在继承关系中使用,在父类中使用protected修饰的属性和方法可以被子类继承
    创建子类对象时,父类的构造方法也会被调用,why?
        因为子类要使用父类的数据,那么就要通过父类的构造方法来初始化数据
        如果创建子类对象时使用默认构造方法,那么父类的默认构造方法也会被调用
        创建子类对象时会调用父类的默认构造方法
        
    当父类中没有无参构造方法时,子类必须显示的调用父类的带参构造方法,使用super()
    可以在子类中显示的使用super(...),调用父类的构造方法,只能出现在第一句

    面试题:overloading和overriding的区别?
    overloading:方法的重载,方法名相同,参数列表不同,与返回值无关,发生在同一个类中
    overriding:方法的重写,发生在子父类中,方法名相同,参数列表相同,返回值相同,子类的访问修饰符要大于或等于父类的访问修饰符,
                子类的异常声明必须小于或等于父类的异常声明,如果方法被private,static,final修饰,那么不能被重写


*/
public class Test1{
    public static void main(String[]args){
        
        HomeDog homeDog = new HomeDog("旺财");
        homeDog.print();
        homeDog.eat();
    
    }
}

class Dog{
    protected String name;
    protected String sex;
    public Dog(String name,String sex){
        this.name = name;
        this.sex = sex;
        System.out.println("我是Dog的构造方法");
    }
    //protected void eat()throws Exception{//抛出一个异常
    protected void eat(){
        System.out.println("吃饭");
    }
}
class HomeDog extends Dog{
    public HomeDog(String name){
        super(name,"公");//只能在第一句
        System.out.println("我是HomeDog的构造方法");
    }
    public void print(){
        //super.属性  表示调用父类的属性,如果是继承过来的属性,则super可以省略
        System.out.println(super.name+",我是一只家狗");
    }
    //重写父类的方法
    public void eat(){
        super.eat();//调用父类的方法(此处会打印出“吃饭”)
        System.out.println("我是家狗,我喜欢吃骨头");
    }
}

class HuskyDog extends Dog{
    public HuskyDog(String name,String sex){
        super(name,"母");
        System.out.println("我是HuskyDog的构造方法");
    }
    
    public void show(){
        System.out.println(name+"我是哈士奇,我能跳舞");
    }
}

继承,方法的重写,super关键字_第3张图片
image.png

你可能感兴趣的:(继承,方法的重写,super关键字)