java的多态性
- 事务的多态性
- Java引用变量有两个类型:
- 一个是编译时的类型,一个是运行时的类型。
- 编译时类型由声明该变量时使用的类型决定,运行时由实际赋给该变量的对象决定。
- 如果编译时类型和运行时类型不一致,就可能出现所谓的多态。
- instanceof 运算符
- 判断两个类型是否能够转换
抽象方法:
不允许包含方法体;子类中需要重写父类的抽象方法,否则,子类也是抽象类
static final private 不能与abstract
多态的分类
- 编译时多态(设计时多态):方法重载
- 运行时多态:Java运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态
我们平时说的多态,多指运行时多态
class BaseClass{
public int book = 6;
public void base(){
System.out.println("父类的普通方法");
}
public void test(){
System.out.println("父类被覆盖的方法");
}
}
public class SubClass extends BaseClass{
public String book = "我说,长安尽头有神明";
public void sub(){
System.out.println("子类的普通方法");
}
public void test(){
System.out.println("子类覆盖父类的方法");
}
public static void main(String[] args) {
//编译与运行时类型完全一样,因此不存在多态
BaseClass bc = new BaseClass();
//输出6
System.out.println(bc.book);
//下面两次将调用BaseClass下的方法
bc.base();
bc.test();
//编译与运行时类型完全一样,因此不存在多态
SubClass su = new SubClass();
//输出我说,长安尽头有神明
System.out.println(su.book);
//下面调用将执行从父类继承到的base方法
su.base();
//下面调用将执行当前类的test方法
su.test();
//编译与运行时类型不同,因此发生多态
BaseClass PloymophicBc = new SubClass();
//输出6----------表明访问的是父类的Filed
System.out.println(PloymophicBc.book);
//下面调用将执行从父类继承到的base方法
PloymophicBc.base();
//下面调用将执行当前类的test方法
PloymophicBc.test();
//因为PloymophicBc的编译时类型是BaseClass
//baseClass类没有提供sub方法,所以下面方法编译时会出现错误
// PloymophicBc.sub();
if(PloymophicBc instanceof SubClass)
{
}
}
}
接口
//接口访问修饰符:public 默认
public interface INet {
/*接口中抽象方法可以不写abstract关键字
/*访问修饰符默认public
* 当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类
*/
void network();
//接口中可以包含常量,默认public static final
int TEMP=20;
//default:默认方法 可以带方法体 jdk1.8后新增
//可以在实现类中重写,并可以通过接口的引用调用
default void connection(){
System.out.println("我是接口中的默认链接");
}
//static:静态方法 可以带方法体 jdk1.8后新增
//不可以在实现类中重写,可以同接口名调用
static void stop(){
System.out.println("我是接口中的静态方法");
}
}