多态_abstract_接口_final多态polymorphism在方法调用时自动识别所调用方法的对象并根据实际对象去调用相应方法。如果满足以下三个条件那么构成多态继承方法的重写父类引用指向子类对象为了实现高内聚低耦合的特点例子士兵上战场拿着不同武器杀敌1.武器类当加上abstract的时候也是下面要提到的抽象类只是起到一个被继承然后重写方法的作用package com.fyzy.poly2; public class Weapon { public void attack(){ System.out.println(武器攻击); } }2.士兵类package com.fyzy.poly2; public class Soldier { public void killEmple(Weapon w){ //这里的Weapon w就是起到了一个父类引用子类对象的作用 System.out.println(士兵上战场杀敌); w.attack(); } }3.不同武器的类//武器AK47 package com.fyzy.poly2; public class AK47 extends Weapon{ public void attack(){ System.out.println(使用AK47攻击); } } //武器M4a1 package com.fyzy.poly2; public class M4a1 extends Weapon{ Override public void attack() { System.out.println(使用M4a1攻击); } }4.Test测试package com.fyzy.poly2; public class Test { public static void main(String[] args) { //可见这里也没有实例化Weapon类 AK47 ak47 new AK47(); M4a1 m4a1 new M4a1(); Soldier s new Soldier(); s.killEmple(ak47); s.killEmple(m4a1); } }abstract 关键字用abstract 修饰的类叫做抽象类用abstract 修饰的方法叫做抽象方法。如果一个类中有抽象方法那么这个类必须是抽象类抽象类不能被实例化只能用来被继承抽象方法没有方法体只有方法的声明抽象类的子类必须重写其继承的抽象方法还是上面的那个例子将Weapon添加上abstract关键字package com.fyzy.TestAbstract; public abstract class Weapon { public void attack(){}; }它的其子类像AK47或者M4a1都必须重写这个attack方法接口interface接口可以看成是一个特殊的抽象类接口不能被实例化只能被实现implements接口中的默认属性都是由 public static 修饰方法都是由 public abstract修饰如果一个类实现了某个接口那么必须要重写接口中的所有方法接口可以帮助解决java中不支持多继承的情况一个类只能继承自一个父类但可以实现多个接口[修饰符] interface 接口名{ [public static] 属性 [public abstract] 方法 }例子package com.fyzy.TestInterface; public interface Gun { void shoot(); }package com.fyzy.TestInterface; public class AK47 extends Weapon implements Gun{ public void attack(){ System.out.println(使用AK47攻击); } Override public void shoot() { System.out.println(记得压枪不然飘); } }package com.fyzy.TestInterface; public class Test2 { public static void main(String[] args) { Gun g new AK47(); Weapon w new AK47(); //使用方法也是按照父类引用子类的方式可以将它当成一个枪看也可以当成一个武器来看 g.shoot(); w.attack(); } }类的完整声明格式[修饰符] class 类名 [extends 父类名] [implements 接口1接口2……]{ 属性 方法 }final 关键字final 修饰的变量不能改变final 修饰的类不能被继承final 修饰的方法不能被重写public class Test { public static void main(String[] args) { final int a 1 ; //final 修饰的变量不能改变 // a 20; } final class A{ } //final 修饰的类不能被继承 class B extends A{ } class AA{ public final void fun(){ } } class BB extends AA{ //final 修饰的方法不能被重写 public void fun(){ } } }