如果要求程序员必须在某个类中特定的方法中实现一个特定的功能, 应该如何实现?
可以使用抽象类和接口,不管是继承和实现都要重写父类或者接口的抽象方法
接口的作用?
定义一个规范:例如方法名和参数列表;方法该叫什么名字这个方法传什么参数
接口和接口实现类定义的语法
接口
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;//这是才可以调用子类特有的方法
}
}