java中多态的体现思想
2016-07-21 00:45
190 查看
我们都知道,面向对象有三大特征:封装,继承,多态;
多态:就是指相同的事物的不同状态,比如:水。水可以有三种状态。那么在JAVA中的多态也可以理解成这个意思,就是:
将父对象设置成为和一个或多个它的子对象相等的技术,
比如Animal = Dog;
当满足这三个条件 1.有继承 2. 有重写 3. 要有父类引用指向子类对象,就有多态的影子;
多态性使得能够利用同一类(父类)引用不同类的对象,
以及根据所引用对象的不同,以不同的方式执行相同的操作。
多态实现包括两种方式:重载和重写
例如:Animal a = new Dog();
父类引用指向子类对象,Animal类中包含一个eat()方法,而 Dog类继承自
Animal类,如果子类重写了父类的eat()方法,则调用的时候,就可以按照子类
的形式调用,本质上是父类的方法,但是子类重写之后,就成了另一种方式,
这就是多态。
转型:
* 向上转型,父类的引用指向子类的对象
通俗的说就是将子类对象转换为父类对象,此处的父类对象可以是接口
* 向下转型,把指向子类对象的父类引用赋值给子类的引用(要强制转换)
*
举个例子:
`package com.tr;
class Animal{
//描述动物,动物有吃饭,跑的行为
public void eat(){
System.out.println(“父类吃的方法!!”);
}
public void run(){
System.out.println(“父类跑的方法!!”);
}
}
class Dog extends Animal{
//描述狗,同样的有吃饭,看家,睡觉的属性
public void eat(){
System.out.println(“子类dog吃的方法!!!”);
}
public void housekeeping(){
System.out.println(“子类dog看家的方法”);
}
public void sleep(){
System.out.println(“子类dog睡觉的方法”);
}
}
class Ma extends Animal{
//描述狗,有吃饭喝水的行为
public void chi(){
System.out.println(“Ma吃的方法”);
}
public void he(){
System.out.println(“Ma喝的方法”);
}
}
public class DuotaiDemo {
}`
多态:就是指相同的事物的不同状态,比如:水。水可以有三种状态。那么在JAVA中的多态也可以理解成这个意思,就是:
将父对象设置成为和一个或多个它的子对象相等的技术,
比如Animal = Dog;
当满足这三个条件 1.有继承 2. 有重写 3. 要有父类引用指向子类对象,就有多态的影子;
多态性使得能够利用同一类(父类)引用不同类的对象,
以及根据所引用对象的不同,以不同的方式执行相同的操作。
多态实现包括两种方式:重载和重写
例如:Animal a = new Dog();
父类引用指向子类对象,Animal类中包含一个eat()方法,而 Dog类继承自
Animal类,如果子类重写了父类的eat()方法,则调用的时候,就可以按照子类
的形式调用,本质上是父类的方法,但是子类重写之后,就成了另一种方式,
这就是多态。
转型:
* 向上转型,父类的引用指向子类的对象
通俗的说就是将子类对象转换为父类对象,此处的父类对象可以是接口
* 向下转型,把指向子类对象的父类引用赋值给子类的引用(要强制转换)
*
举个例子:
`package com.tr;
class Animal{
//描述动物,动物有吃饭,跑的行为
public void eat(){
System.out.println(“父类吃的方法!!”);
}
public void run(){
System.out.println(“父类跑的方法!!”);
}
}
class Dog extends Animal{
//描述狗,同样的有吃饭,看家,睡觉的属性
public void eat(){
System.out.println(“子类dog吃的方法!!!”);
}
public void housekeeping(){
System.out.println(“子类dog看家的方法”);
}
public void sleep(){
System.out.println(“子类dog睡觉的方法”);
}
}
class Ma extends Animal{
//描述狗,有吃饭喝水的行为
public void chi(){
System.out.println(“Ma吃的方法”);
}
public void he(){
System.out.println(“Ma喝的方法”);
}
}
public class DuotaiDemo {
public static void main(String[] args) { //父类的引用指向子类的对象,而不能是子类的而子类的引用不能指向父类的对象 //能说dog是动物,而不能说动物就是dog /** * 向上转型,父类的引用指向子类的对象 * 通俗的说就是将子类对象转换为父类对象,此处的父类对象可以是接口 */ Animal a = new Dog(); //a.eat();; //注意,向上转型之后子类a会遗失除与父类共有的其他方法,比如在这 a调不到housekeeping方法和sleep方法 /** * 向下转型,把指向子类对象的父类引用赋值给子类的引用(要强制转换) * 首先要向上转型,然后在向下转型,两个步骤 * 向下转型之后d能调到父类和子类的所有公有方法 * Girl g2=new Girl(); * MMGirl mmg1=(MMGirl)g2; //不安全的向下转型,编译无错但会运行会出错 * 运行出错: * Exception in thread "main" java.lang.ClassCastException: com.wensefu.other1.Girl * at com.wensefu.other1.Main.main(Girl.java:36) * 如代码所示,可以通过instanceof来防止出现异常 */ Dog d =(Dog)a; d.run(); d.eat(); d.housekeeping(); d.sleep(); } /** * 有多个狗和马对象都要调用吃饭这个方法,这样会使 * d.eat()代码重复性非常严重 * Dog d = new Dog() * d.eat() * d.housekeeping(); d.sleep(); * 为了提高代码的复用性,可以将d.eat()封装起来 } 然后创建对象,直接调用fun()方法即可 public static void fun2(Dog d){ d.eat(); d.housekeeping(); d.sleep(); } fun2(new Dog()); //static方法在同一个类中可以直接方法名调,不同类中要 类名.方法名 调用,要 public 修饰的 public static void fun3(Ma m){ m.eat(); m.chi(); m.he(); } * public static void fun1(Animal h){ h.eat(); */
}`
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树