继承和多态

张开发
2026/4/21 9:46:53 15 分钟阅读

分享文章

继承和多态
继承和多态是什么以及他们的区别一文搞懂(通过创建线程的例子说明)。一、继承Inheritance定义继承是一种创建新类的机制子类可以复用父类的属性和方法并可以在此基础上添加新的成员或重写父类的方法。目的1.代码复用避免重复编写相同逻辑2.建立类之间的层次关系is-a 关系3.为多态提供基础Java示例public class Animal { public void eat() { System.out.println(Animal eats); } } public class Dog extends Animal { Override public void eat() { System.out.println(Dog eats bones); } public void bark() { System.out.println(Dog barks); } }这里Dog继承了Animal获得了eat()方法并可以重写或扩展。二、多态Polymorphism定义多态是指同一个类型的引用在运行时可以表现出不同对象的行为。它通常通过继承 方法重写或接口实现来实现使得程序可以面向接口编程提高灵活性和扩展性。两种主要形式编译时多态方法重载同一方法名根据参数列表不同在编译时确定。运行时多态方法重写父类引用调用被子类重写的方法时实际执行的是子类的方法。向上转型下面例子2将子类对象的引用赋给父类或接口类型的变量。这种转换是自动的、安全的因为子类对象一定包含父类的所有成员。父类类型 引用名 new 子类类型();向下转型将父类引用强制转换为子类类型以便访问子类特有的成员。向下转型需要显式使用强制类型转换符且存在类型安全风险。子类类型 引用名 (子类类型) 父类引用 。类型转换三、例子1.普通例子有三个类 public class Father{} public interface son extends Father{} public class person implements son{}其中有一个方法 void Method(Father parms).请问调用Method时son和person类能作为参数吗为什么在Java中方法 Method(Father parms) 的参数类型是 Father因此任何 Father 的子类对象都可以作为实参传入这体现了多态性向上转型。多态理解为对象的多种形(状)态。解释这里就很好的体现出来了son既可以作为自己又可以作为其父类Father。有多个父类一样person作为son的实现类也就是person是son的实例person也作为参数传进去2.用FutureTask创建线程的例子。public class FutureTaskV implements RunnableFutureV { ... } public interface RunnableFutureV extends Runnable, FutureV { ... } public Thread(Runnable target, String name){ ... }FutureTask tnew FutureTask(new Runnable() { Override public void run() { log.debug(running...t4); } },1); FutureTaskInteger resultnew FutureTask(new CallableInteger() { Override public Integer call() throws Exception { return 0; } }); new Thread(result,t4); new Thread(task, t3).start(); }问题其中这里面参数public Thread(Runnable target, String name) {}为Runnable类型为什么callable作为参数也能传进去回答FutureTask是Runnable的**实现类**FutureTask的对象是Runnable 类型的实例

更多文章