网易云课堂Java模拟面试笔记(41-50)

41.继承中的构造方法(三)

题目:

    class A{
        public A(){
            Syso("A()");
        }
    }
    class B extends A{
        public B(){
            Syso("B()");
        }
    }
    class C extends B{
        public C(){
            Syso("C()");
        }
    }
    public class Test{
        public static void main(String[] args){
            new C();
        }
    }
复制代码
//A() B() C()
复制代码

** 在创建子类对象的时候,将会沿着继承链自上而下依次调用继承关系上的其他父类的构造方法。**

42.方法覆盖(一)

题目:什么是方法覆盖?有什么作用? eg:

    class SuperClass{
        public void add(){
            Syso(1+2+3);
        }
        public void mul(){
            Syso(1*2*3);
        }
    }
    class SubClass extends SuperClass{
        public void add(){
            Syso(1+2+3+4+5);
        }
        public void div(){
            Syso(10/10);
        }
    }
复制代码

** 方法覆盖,又称为方法重写,override,指的是在有继承关系的两个类中,子类可以重写父类的方法,也就是可以定义与父类中同名、同参数、同返回值的方法,但是权限不能缩小。方法覆盖能够让子类动态调用到自定义的方法,是多态性的一种体现。**

43.方法覆盖(二)

class SuperClass{
    public void add(){
        Syso(1+2+3);
    }
}
class SubClass extends SuperClass{
    public void add(){
        Syso(1+2+3+4+5);
    }
}
public class TestOverride{
    public static void main(String[] args){
        SubClass s = new SubClass();
        s.add();
    
}
复制代码

//15 子类对象调用的方法,可以是自己新定义的,也可以是继承自父类的。如果子类把父类中的方法进行了覆盖,将调用覆盖后的方法。

44.父类引用指向子类对象(一)

class SuperClass{
    public void add(){
        Syso(1+2+3);
    }
}
class SubClass extends SuperClass{
    public void add(){
        Syso(1+2+3+4+5);
    }
}
public class TestOverride{
    public static void main(String[] args){
        SuperClass s = new SubClass();
        s.add();
    
}
复制代码

//15 使用父类类型声明的变量,却使用子类初始化,在编译期是到父类中去检查是否存在要调用的方法,而运行时却绑定到子类运行,因此依然调用子类中的add方法。

45.父类引用指向子类对象(二)

class SuperClass{
    public void add(){
        Syso(1+2+3);
    }
}
class SubClass extends SuperClass{
    public void add(){
        Syso(1+2+3+4+5);
    }
    public void div(){
        Syso(10/10);
    }
}
public class TestOverride{
    public static void main(String[] args){
        SubClass s = new SubClass();
        s.div();
    
}
复制代码

编译错误,使用父类类型声明的变量,却使用子类初始化,在编译期是到父类中去检查是否存在要调用的方法,而运行时却绑定到子类运行。如果调用的方法父类中根本不存在,就会发生编译错误。

46.super关键字(一)

题目:假设父类中有一个方法add(),子类要把这个方法进行重写,但是子类add方法首先依然要执行父类中的add方法的所有代码,在这个基础上加上新的功能。请问如何实现? 在子类的add方法中,先使用super.add()调用父类的add方法,再添加新的功能。

47.super关键字(二)

题目:super关键字有什么作用? super关键字有两个作用,都是在继承关系中,子类中使用。第一个作用是在子类的方法中,使用super调用父类的属性或方法。第二个作用是在子类的构造方法的第一条语句,显式调用父类中的某一个构造方法。

48.抽象类

题目:抽象类有什么特点?有什么作用? 抽象类使用abstract进行修饰,它的特点是不能够实例化,也就是不能创建对象。但是可以作为引用类型使用。抽象类往往用来作为父类,统一规范子类的属性和行为。API中有很多抽象类。

49.抽象方法

题目:抽象方法有什么特点?有什么作用? 抽象方法是没有方法体的方法。抽象方法都是存在于抽象类中,被子类实现。能够统一规范子类what to do,而子类中实现How to do。

50.抽象类与抽象方法的关系

抽象类中不一定有抽象方法。只要这个类不应该有实例,就可以定义为抽象类。而有抽象方法的类一定是抽象类,否则会有编译错误。

转载于:https://juejin.im/post/5b5eda91e51d4519125344b7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值