A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 236gswqt 中级黑马   /  2014-6-29 14:37  /  969 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   Java中是如何实现多态的?实现机制是什么?

7 个回复

倒序浏览
多态很简单,意思就是一个接口,多种方法;多态又分为静态和动态,方法重载属于静态,方法覆盖和继承属于动态
回复 使用道具 举报
方法重载属于静态???方法覆盖和继承属于动态??
能详细解答下吗
回复 使用道具 举报
论坛里有很多总结过的帖子,多来逛论坛关注一下。一看你就是个新手,好好努力吧。
回复 使用道具 举报
个人理解:
多态实现就是   fu f=new zi();//父类引用子类对象,执行的却是父类中的方法,但是子类可以覆盖父类中的方法
public class Test {

        public static void main(String[] args) {
                fu f=new zi();
                f.eat();
                f.work();
        }

}
class fu{
        public void eat(){
                System.out.println("我会吃");
        }
        public void work(){
                System.out.println("我会工作");
        }
}
class zi extends fu{
        public void eat(){ //这里复写了父类中的eat方法,所以执行的时候运行的是这个大括号里的代码
                System.out.println("我会吃,但我吃的吃相很狼狈");
        }
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
多态和接口有关?
回复 使用道具 举报 1 0
多态首先把握三个必要条件:
                 1、有继承或实现;
                 2、有重写;
                 3、父类引用指向子类对象;
代码体现:
public class DuoTai {
public static void main(String[] args) {
  Fu fu = new Zi();//1、父类引用指向子类对象
  Fu1 fu1=new Zi1();//1、父接口引用子实现类对象
}
}
//一、接口多态
interface Fu1
{
public void show();
}
//2、实现接口
class Zi1 implements Fu1
{
//3、实现接口的方法
public void show()
{
}
}

//二、继承多态
class Fu {  
public void show() {
}
}
//2、子类继承父类
class Zi extends Fu {
//3、重写父类方法
public void show() {
}
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
多态:多态指的是编译时类型变化,而运行时类型不变。
多态分两种:
①        编译时多态:编译时动态重载;
②        运行时多态:指一个对象可以具有多个类型。

对象是客观的,人对对象的认识是主观的。
例:
Animal a=new Dog();查看格式名称;
Dog d=(Dog)a。声明父类来引用子类。
(思考上面的格式)

运行时多态的三原则:(应用时为覆盖)
1、        对象不变;(改变的是主观认识)
2、        对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。
在上面的例子中:Animal a=new Dog();对象a的编译时类型为Animal,运行时类型为dog。
注意:编译时类型一定要为运行时类型的父类(或者同类型)。
对于语句:Dog d=(Dog)a。将d强制声明为a类型,此时d为Dog(),此时d就可以调用运行时类型。注意:a和d指向同一对象。
3、        在程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法。

关系运算符:instanceof
a  instanceof Animal;(这个式子的结果是一个布尔表达式)
a为对象变量,Animal是类名。
上面语句是判定a是否可以贴Animal标签。如果可以贴则返回true,否则返回false。
在上面的题目中: a instanceof Animal返回 True,
                 a instanceof Dog也返回 True,
instanceof用于判定是否将前面的对象变量赋值后边的类名。
Instanceof一般用于在强制类型转换之前判定变量是否可以强制转换。

如果Animal a=new Animal();
Dog d=Dog()a;
此时编译无误,但运行则会报错。

Animal a=new Dog()相当于下面语句的功能:
Animal a=getAnimal();
Public static Animal.getAnimal;
Return new Dog();

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马