黑马程序员-------多态
来源:互联网 发布:gotv倚天屠龙记ts源码 编辑:程序博客网 时间:2024/06/05 16:39
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
1. 什么是多态
多态:指同一实体具有多种形态
比如 我去动物园看动物,动物有好多种 狮子、大象、猴子等
人包括 男人和女人
这里的所说的“动物”和“人” 就有好多的形态 就是这个意思
2.关于多态
1)多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接受自己的子类对象
2)多态的前提
必须是类与类之间有关系,要么继承要么实现
通常还有一个前提:存在覆盖
3)多态的好处
多态的出现大大提高程序的扩展性。
4)多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类的成果
abstract class Animal{
abstract void eat();
}
class Cat extends Animal{
void eat() {
System.out.println("吃鱼");
}
public void catchMouse(){
System.out.println("抓老鼠");
}
}
class Dog extends Animal{
void eat(){
System.out.println("吃骨头");
}
public void kanjia(){
System.out.println("kanjia");
}
}
public class DuoTaiDemo {
public static void main(String[] args) {
function(new Cat());
}
public static void function(Animal a)//Animal a = new Cat();
{
a.eat();
}
}
多态转型
Animal a = new Cat(); // 类型提升,向上转型
如果要调用子类 猫的特有方法 应转变成子类类型,向下转型
Cat c = (Cat)a; // 向下转型
5)多态成员的特点
class Fu{int num = 4;void method1(){System.out.println("fu method_1");}void method2(){System.out.println("fu method_2");}static void method4(){System.out.println("fi method_4");}}class Zi extends Fu{void method1(){System.out.println("zi method_1");}void method3(){System.out.println("zi method_3");}static void method4(){System.out.println("zi method_4");}}public class DuoTaiDemo4 {public static void main(String[] args) {//Fu f = new Zi();//System.out.println(f.num);////Zi z = new Zi();//System.out.println(z.num);Fu f = new Zi();f.method4();//Fu f = new Zi();//f.method1();//f.method2();/*f.method3(); * 编译失败 * 在多态中成员函数的特点: * 在编译时期:参阅引用类型变量所属的类中是否有调用的方法。如果有, * 编译通过 没有,编译不通过 * 简单的总结就是 成员函数被调用时 编译看左边,运行看右边 * * * 在多态中,成员变量的特点: * 无论编译和运行,都参考左边(应用型变量所属的类)。 * * 在多态中,静态成员函数的特点: * 无论编译和运行,都参考左边。 * *///Zi z = new Zi();//z.method1();//zi method_1//z.method2();//fi method_2//z.method3();//zi method_3}}
6)多态的应用
多态主板的示例
/* * 需求: * 电脑运行实例 * 电脑运行基于主板 *///PCI接口interface PCI{void open();void close();}class MainBoard{public void run(){System.out.println("mainboard run");}public void usePCI(PCI p){if(p!=null){p.open();p.close();}}/*public void useNet( NetCard n){n.open();n.close();}*/}//网卡class NetCard implements PCI{public void open(){System.out.println("netcard open");}public void close(){System.out.println("netcard close");}}class SoundCard implements PCI{public void open() {System.out.println("SoundCard open");}public void close() {System.out.println("SoundCard close");}}public class DuTaiDemo5 {public static void main(String[] args) {MainBoard mb = new MainBoard();mb.run();mb.usePCI(null);mb.usePCI(new NetCard());mb.usePCI(new SoundCard());/*mb.useNet(new NetCard());*/}
数据库的示例(伪代码)
/*package day08; * 需求:数据库的操作 * 数据是:用户信息 * 1.链接数据库 JDBC Hibernate * 2.操作数据库 * c create r read u update d delete * * 3.关闭数据库链接 interface UserInfoDao{public void add(User user);public void delete(User user);}class UserInfoByJDBC extends UserInfoDao{public void add(User user){1.JDBC链接数据库;2.使用sql添加语句添加数据3.关闭链接}public void delete(User user){1.JDBC链接数据库;2.使用sql删除语句删除数据3.关闭链接}}class UserInfoByHibernate extends UserInfoDao{public void add(User user){1.Hibernate链接数据库;2.使用sql添加语句添加数据3.关闭链接}public void delete(User user){1.Hibernate链接数据库;2.使用sql删除语句删除数据3.关闭链接}}public class DuoTaiDemo2 {public static void main(String[] args) {//UserInfoByJDBC ui = new UserInfoByJDBC();//UserInfoByHibernate ui = new UserInfoByHibernate();UserInfoDao ui = new UserInfoByJDBC();ui.add(user);ui.delete(user);}}*/
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
- 黑马程序员_多态
- 黑马程序员_多态
- 黑马程序员_多态
- 24.黑马程序员-多态
- 黑马程序员-多态
- 黑马程序员---多态
- 黑马程序员_多态
- 黑马程序员-多态
- 黑马程序员 多态、重载
- 黑马程序员_java 多态
- 黑马程序员---多态
- 黑马程序员-多态
- 黑马程序员-继承,多态
- 黑马程序员_java多态
- 黑马程序员--多态
- 黑马程序员--多态
- 黑马程序员—多态
- 黑马程序员_多态
- Java线程池使用说明
- 由一个C++版本猜数字游戏引起的效率问题
- 数据结构基础(4)————next数组的理解
- “莫须有”搜索引擎优化(SEO)的迷信
- pat 1022
- 黑马程序员-------多态
- leetcode LRUCache
- “莫须有”的搜索引擎优化(SEO)迷信
- js中容易出错的地方
- 点击显示菜单 下拉菜单
- “词库门”事件中谷歌搜狐的表现
- android 动态添加控件
- Maven VS Ant
- android 想要弹出另外界面操作步骤