面向对象多态

如果要求程序员必须在某个类中特定的方法中实现一个特定的功能, 应该如何实现?

可以使用抽象类和接口,不管是继承和实现都要重写父类或者接口的抽象方法

接口的作用?

定义一个规范:例如方法名和参数列表;方法该叫什么名字这个方法传什么参数

接口和接口实现类定义的语法

接口

public interface I+接口名(驼峰命名){
    //抽象方法
    返回值类型 方法名称(参数列表);//默认加了public abstract
    //default 修饰的 默认方法 默认方法实现类可以不重写
    default 返回值类型 方法名(参数列表){
        //方法体
    }
    //static修饰的静态方法
    static 返回值类型 方法名(参数列表){
        //方法体
    }
    //private 修饰的私有方法
}

接口实现类

public class 类名(驼峰命名)+Impl implements 接口名{
    @Oevrride
    //重写对应接口的抽象方法
    
    
    //实现类特有的方法
}
实现类在实现一个接口的时候, 需要注意哪些问题?

实现类必须重写接口中的全部抽象方法,否者会提示报错

接口和抽象类的区别?

接口:接口是用来定义规范的,而且接口可以多继承,可以被多个类实现

抽象类:抽象类只能单继承,抽象类里面可以放普通方法

如何理解编译类型和运行类型?
Father b = new Son()

​ Father和Son必须是父类和子类或者接口和实现关系

编译时的类型是由声明该变量的类型所决定的,这时的编译类型就是Person

运行时的类型是由实际赋值给该变量的类型所决定的,这时的运行类型就是Son

什么是多态? 如何体现多态?好处是什么?

多态简答来说就是左父右子 例如:Father a = new Son() 左边的Father要么是右边Son的父类,要么Son是Father的实现类

当编译类型和运行类型不一样时,这就是多态

多态的运用在一定程度上降低的代码的耦合度,某个代码块的失效,不会影响到另一个代码块的功能;而且也方便后期功能的拓展,不会影响到其他功能的使用

多态情况下, 方法访问的流程?

在编译时,会先查看父类有无该方法,若无编译失败.然后在运行时期会先查看子类中是否重写了父类的该方法,若重写调用子类的方法,若无调用父类的方法

多态情况下,父类如何访问子类特有的方法

在多态情况下如果父类想要调用子类的特有的方法就需要强转(向下转型).这时父类就可以调用子类特有的方法

例如

//父类
public clss Father{
    
}
//子类
public clss Son extends Father{
    //子类特有的方法
    public void test(){
        System.out.println("子类特有的方法");
    }
}
//测试类
public class Demo{
    public static voic main(String[] args){
       Father f = new Son();
        //这是如果直接调用子类特有的方法时错误的
        f.test;//错误的
        //必须向下转型才可以调用子类特有的方法
        Son s = (Son)f;
        s.test;//这是才可以调用子类特有的方法
        
    }
}
//必须向下转型才可以调用子类特有的方法
    Son s = (Son)f;
    s.test;//这是才可以调用子类特有的方法
    
}

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值