- 浏览: 1575951 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
多态
//多态中成员的特点
接口的特点
多态的应用三:
Object中 几个 常用的方法
/** * 多态: 可以理解为事物存在的多种体现形态 * * 人:男人 女人 动物 : 猫,狗 * * 猫 x=new 猫(); 动物 x=new 猫(); * * 1.多态的体现 * 父类的引用指向子类的对象 * 父类的引用可以接受自己的子类对象 * 2.多态的前提 * 类和类之前要有关系,要么继承,要么实现 * 通常还有一个前提:存在覆盖. * 3.多态的好处 * 多态的初相大大的提高程序的扩展性 * 4.多态的弊端 * 提高了扩展性,但是只能使用父类的引用访问父类中的成员 * 5.多态应用 * * 6.多态出现代码中的特点(多态使用注意事项) * * */ abstract class Animal{ public abstract void eat(); } class Cat extends Animal{ @Override public void eat() { System.out.println("吃鱼"); } public void catchMouse(){ System.out.println("抓老鼠"); } } class Dog extends Animal{ public void eat() { System.out.println("啃骨头"); } public void kanJia(){ System.out.println("看家"); } } class Pig extends Animal{ public void eat() { System.out.println("饲料"); } public void gondDi(){ System.out.println("拱地"); } } public class DuotaiDemo { public static void main(String[] args) { Cat c=new Cat(); c.eat(); Dog d=new Dog(); d.eat(); function(new Cat()); function(new Dog()); function(new Pig()); // 父类的引用指向指向子类的对象 Animal ac=new Cat(); //类型提升,向上转型 将猫转型 成父类型 function(ac); Animal ad=new Dog(); function(ad); //如果想要调用猫的特有方法时 //强制父类的引用,装成子类型 Cat cc=(Cat)ac; //向下转型 cc.catchMouse(); } /*public static void function(Cat c){ c.eat(); } public static void function(Dog d){ d.eat(); } //一年后 养猪了 public static void function(Pig p){ p.eat(); } */ //提高代码的扩展性 可以将下面的封装成一个 工具类 专门用来操作这一类对象的 public static void function(Animal a){ a.eat(); //instanceof :在子类是有限的时候可以判断 . 判断后 然后在应用其 特定的方法. if(a instanceof Cat) ((Cat) a).catchMouse(); else if(a instanceof Dog) ((Dog) a).kanJia(); else if(a instanceof Pig) ((Pig) a).gondDi(); }
//多态中成员的特点
/** * 多态中成员的特点 * 非静态成员函数: 成员函数在多态调用时,编译看着左边,运行看右边. * * 成员变量: 都参考左边(应用类型所属的类) * 静态成员函数: 无论编译和运行 都参考左边 * */ class Fu { int num=5; static int num1=5; static final int num2=5; void method1() { System.out.println("Fu_method1"); } void method2() { System.out.println("Fu_method2"); } //静态 static void method4() { System.out.println("Fu_method4"); } } class Zi extends Fu { int num=8; static int num1=8; static final int num2=8; void method1() { System.out.println("Zi_method1"); } void method3() { System.out.println("Zi_method3"); } //静态 static void method4() { System.out.println("Zi_method4"); } } public class DuotaiDemo1 { /** * @param args */ public static void main(String[] args) { //方法 Fu f=new Zi(); f.method1(); //打印 Zi_method1 f.method2(); //打印 Fu_method2 //f.method3();编译失败 f.method4(); Zi z=new Zi(); z.method1(); //打印 Zi_method1 z.method2(); //打印 Fu_method2 z.method3(); //打印 Zi_method3 z.method4(); //变量 Fu ff=new Zi(); System.out.println(ff.num); // 5 System.out.println(ff.num1); // 5 System.out.println(ff.num2); // 5 Zi zz=new Zi(); System.out.println(zz.num); // 8 System.out.println(zz.num1); // 8 System.out.println(zz.num2); // 8 }
接口的特点
/** * 需求: * 电脑运行实例: * 电脑运行基于主板. * * 多态应用 * 接口:降低耦合性,提高程序的扩展性.提供了规则 */ class MainBoard1{ public void run(){ System.out.println("mainboard run"); } //升级一 public void userNetCard(NetCard1 c){ c.open(); c.close(); } } //升级 一:要上网 怎么办? class NetCard1{ /** * 发现 耦合性很高,如果要听音乐 ,需要 取下这个网卡 */ public void open(){ System.out.println("NetCard open"); } public void close(){ System.out.println("NetCard close"); } } //升级二 :要听音乐 (主板厂商 召集个功能卡开发商 开会 ,定义PCI插槽规则) interface PCI{ public void open(); public void close(); } class MainBoard{ public void run(){ System.out.println("mainBoard run"); } public void userPCI(PCI p){ //接口的引用 执行 子类的对象 if(p!=null){ p.open(); p.close(); } } } class NetCard implements PCI{ @Override public void open(){ System.out.println("NetCard open"); } @Override public void close(){ System.out.println("NetCard close"); } } class SoundCard implements PCI{ @Override public void open(){ System.out.println("SoundCard open"); } @Override public void close(){ System.out.println("SoundCard close"); } } //测试 public class DuoTaiDemo2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MainBoard1 mb1=new MainBoard1(); mb1.run(); //升级一 mb1.userNetCard(new NetCard1()); //升级二 MainBoard mb=new MainBoard(); mb.run(); mb.userPCI(null); mb.userPCI(new NetCard()); mb.userPCI(new SoundCard()); } }
多态的应用三:
/** * 需求: 数据库的操作 * 数据是:用户信息 * 1.连接数据库 * 2.操作数据库 JDBC HIBERNATE * CRUD * 3.关闭数据库连接 */ //升级三 interface UserInfoDao{ public void add(User user); public void delete(User user); } class UserInfoByJDBC implements UserInfoDao{ public void add(User user){ /* * 1.JDBC连接数据库 * 2.使用sql添加语句添加数据 * 3.关闭连接 */ } public void delete(User user){ /* * 1.JDBC连接数据库 * 2.使用sql添加语句删除数据 * 3.关闭连接 */ } } //升级 1: 公司数采用 hibernate框架 class UserInfoByHibernate implements UserInfoDao{ public void add(User user){ /* * 1.Hibernate连接数据库 * 2.使用sql添加语句添加数据 * 3.关闭连接 */ } public void delete(User user){ /* * 1.Hibernate连接数据库 * 2.使用sql添加语句删除数据 * 3.关闭连接 */ } } public class DuoTaiDemo4 { public static void main(String[] args) { // TODO Auto-generated method stub UserInfoByJDBC ui=new UserInfoByJDBC(); ui.add(user); ui.delete(user); //升级 1: 公司要求采用 hibernate框架 发现修改代码的时候还是挺麻烦的 UserInfoByHibernate uh=new UserInfoByHibernate(); uh.add(user); uh.delete(user); //采用多态 UserInfoDao ud=new UserInfoByHibernate(); ud.add(user); ud.delete(user); } }
Object中 几个 常用的方法
/** *Object 是所有对象的直接或者间接父类.该类定义的肯定是所有对象 所有具备的功能 * *Object 中已经提供了对象是否相同的比较方法,我们只需要重写 */ class Demo //extends Object { Demo(){ super();//默认调用 Object } private int num; Demo(int num){ this.num=num; } public boolean compare(Demo d){ return this.num==d.num; } //使用Object 的比较方法 public boolean equals(Object obj){ // Object obj=new Demo(); if(!(obj instanceof Demo)) //判断类型 return false; Demo d=(Demo)obj; //向下转型 return this.num==d.num; } public String toString(){ return "Demo"+num; } } class Person{ } public class ObjectDemo { public static void main(String[] args) { System.out.println("========equals==========="); Demo d1=new Demo(4); Demo d2=new Demo(5); Demo d3=d1; System.out.println(d1.equals(d2)); System.out.println(d1==d2); System.out.println(d1==d3); Person p=new Person(); System.out.println(d1.equals(p)); System.out.println("========toString==========="); System.out.println(d1.toString()); //打印 d1所属类型 和 在内存地址中的值 System.out.println(Integer.toHexString(d1.hashCode())); Class c=d1.getClass(); System.out.println(c.getName()); System.out.println(c.getName()+"@"+Integer.toHexString(d1.hashCode())); System.out.println(d1.toString()); } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 955public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2239经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5603package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 919import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1029/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 966//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1797更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1376import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 787import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2374import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 891// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1143import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 773import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1116import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3855import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 937/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 986import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1807Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 973/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2183package out; import ja ...
相关推荐
细品这杯香浓的咖啡——阿里中间件高级专家沈询的Java之旅.docx 给你一次机会面试架构师 你会问什么问题?.docx 超全面:程序员跳槽神级攻略.docx 跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业...
7. Java 多态的实现(继承、重载、覆盖) - 继承是面向对象程序设计中的一种机制,可以实现代码的重用。 - 重载是指多个方法名相同,但参数列表不同的方法。 - 覆盖是指子类提供了一个与父类相同的方法,但是子类...
8. abstract关键字 9. final关键字 9.1 final介绍 9.2 final使用注意事项 三、继承 1、继承的概念 1.1 继承的定义 1.2 继承举例 1.3 父类和子类 类继承 2.1 方法继承 2.2 方法覆盖 2.3 方法重载 3、多态与动态...
7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能...
134 7.5.1 什么是静态变量 134 7.5.2 静态变量的访问 135 7.5.3 什么是静态常量 137 7.6 综合练习 139 7.7 小结 140 7.8 习题 140 第8章 继承(精彩视频:72分钟) 141 8.1 什么是继承 141 8.1.1 类的继承 142 8.1.2...
23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested ...
23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested ...
23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested ...
9.4 多态 284 实例173 饮食文化 284 实例174 使用构造方法的重载计算课程的GPA值 287 第10章 内部类与接口(教学视频:41分钟) 290 10.1 成员内部类 290 实例175 成员内部类的使用规范 290 ...
9.4 多态 284 实例173 饮食文化 284 实例174 使用构造方法的重载计算课程的GPA值 287 第10章 内部类与接口(教学视频:41分钟) 290 10.1 成员内部类 290 实例175 成员内部类的使用规范 290 实例176 猜谜 292 10.2 ...
9.4 多态 284 实例173 饮食文化 284 实例174 使用构造方法的重载计算课程的GPA值 287 第10章 内部类与接口(教学视频:41分钟) 290 10.1 成员内部类 290 实例175 成员内部类的使用规范 290 ...
7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的...
23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested ...
23、java中实现多态的机制是什么? 18 24、abstract class和interface有什么区别? 18 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 20 26、什么是内部类?Static Nested ...
23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested ...
9.4 多态 284 实例173 饮食文化 284 实例174 使用构造方法的重载计算课程的GPA值 287 第10章 内部类与接口(教学视频:41分钟) 290 10.1 成员内部类 290 实例175 成员内部类的使用规范 290 实例176 猜谜 292 10.2 ...
23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested ...
23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested ...