Java 学习 day08
01-面向对象(多态-概念)
package myFirstCode; /*
多态:可以理解为事务存在的多种体现形态。 人:男人,女人 动物:猫,狗 猫 x = new 猫(); 动物 x = new 猫(); 1. 多态的体现
2. 多态的前提
3. 多态的好处
4. 多态的应用 */ public class DuoTailDemo { public static void main(String[] args) {
// TODO Auto-generated method stub } }
02-面向对象(多态-扩展性)
package myFirstCode; /*
多态:可以理解为事务存在的多种体现形态。 人:男人,女人 动物:猫,狗 猫 x = new 猫(); 动物 x = new 猫(); 1. 多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。 2. 多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。 3. 多态的好处
多态的出现大大的提高了程序的扩展性。 4. 多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。 5. 多态的应用 */ abstract class Animal
{
abstract void eat();
} class Cat extends Animal
{
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 gongDi()
{
System.out.println("拱地");
}
} public class DuoTailDemo { public static void main(String[] args) {
// TODO Auto-generated method stub
/*
Cat c = new Cat();
c.eat();
Dog d = new Dog();
d.eat();
Cat c = new Cat();
function(c);
Dog d = new Dog();
function(d);
*/ // Animal c = new Cat();
// c.eat(); function(new Cat());
function(new Dog());
function(new Pig());
}
public static void function(Animal a)//Animal a = new Cat();
{
a.eat();
}
/*
public static void function(Cat c)
{
c.eat();
}
public static void function(Dog d)
{
d.eat();
}
*/ }
03-面向对象(多态-转型)
package myFirstCode; /*
多态:可以理解为事务存在的多种体现形态。 人:男人,女人 动物:猫,狗 猫 x = new 猫(); 动物 x = new 猫(); 1. 多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。 2. 多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。 3. 多态的好处
多态的出现大大的提高了程序的扩展性。 4. 多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。 5. 多态的应用 */ abstract class Animal
{
abstract void eat();
} class Cat extends Animal
{
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 gongDi()
{
System.out.println("拱地");
}
} public class DuoTailDemo2 { public static void main(String[] args) {
// Animal a = new Cat();//类型提升。向上转型、向下转型。
// a.eat(); //如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用。转换成子类类型。向下转型。
// Cat c = (Cat)a;
// c.catchMouse(); //千万不要出现这样的操作,就是将父类对象转成子类类型。
//我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。
//多态自始至终都是子类对象在做着变化。
// Animal a = new Animal();
// Cat c = (Cat)a; /*
毕姥爷 x = new 毕老师(); x.讲课(); 毕老师 y = (毕老师)x;
y.看电影();
//x.看电影(); 没有看电影的方法
*/
function(new Dog());
function(new Cat());
}
public static void function(Animal a)//Animal a = new Cat();
{
a.eat();
/*
if(a instanceof Animal)
{
System.out.println("haha")
}
*/
if(a instanceof Cat)
{
Cat c = (Cat)a;
c.catchMouse();
}
else if(a instanceof Dog)
{
Dog c = (Dog)a;
c.kanjia();
}
} }
04-面向对象(多态-示例)
package myFirstCode; /*
基础班学生:
学习,睡觉。
高级班学生:
学习,睡觉。 可以将这两类事务进行抽取。
*/ abstract class Student5
{
public abstract void study();
public void sleep()
{
System.out.println("躺着睡");
}
} class DoStudent
{
public void doSome(Student5 stu)
{
stu.study();
stu.sleep();
}
} //-----以上是工具类 class BaseStudent2 extends Student5
{
public void study()
{
System.out.println("base study");
}
public void sleep()
{
System.out.println("坐着睡");
}
} class AdvStudent2 extends Student5
{
public void study()
{
System.out.println("adv study");
}
public void sleep()
{
System.out.println("坐着睡");
}
} public class DuoTailDemo3 { public static void main(String[] args)
{
DoStudent ds = new DoStudent();
ds.doSome(new BaseStudent2());
ds.doSome(new AdvStudent2()); // BaseStudent2 bs = new BaseStudent2();
// bs.sleep();
// bs.study();
// AdvStudent2 as = new AdvStudent2();
// bs.sleep();
// bs.study();
}
}
05-面向对象(多态中成员的特点)
package myFirstCode; class Fu3
{
void method1()
{
System.out.println("fu method1");
}
void method2()
{
System.out.println("fu method2");
}
}
class Zi3 extends Fu3
{
void method1()
{
System.out.println("zi method1");
}
void method3()
{
System.out.println("zi method3");
}
} public class DuoTaiDemo4 { public static void main(String[] args) {
// TODO Auto-generated method stub Fu3 f = new Zi3();
f.method1();
f.method2();
// f.method3();
/*
* 在多态中成员函数的特点:
* 在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
* 在运行时期:参阅对象所属的类中是否有调用的方法。
* 简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
*
*/ // Zi3 z = new Zi3();
// z.method1();
// z.method2();
// z.method3(); } }
06-面向对象(多态的主板示例)
package myFirstCode; import classOne.IfClause; /*
* 需求:
* 电脑运行实例,
* 电脑运行基于主板。
*/ interface PCI
{
public void open();
public void close();
} class MainBoard
{
public void run()
{
System.out.println("mainboard run");
}
public void usePCI(PCI p)//PCI p = new NetCard() //接口型引用指向自己的子类对象。
{
if (p!=null)
{
p.open();
p.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");
}
} /*
class MainBoard
{
public void run()
{
System.out.println("manboard run");
}
public void useNetCard(NetCard c)
{
c.open();
c.close();
}
} class NetCard
{
public void open()
{
System.out.println("netcard open");
}
public void close()
{
System.out.println("netcard close");
}
}
*/ public class DuoTaiDemo5 { public static void main(String[] args)
{
// TODO Auto-generated method stub
MainBoard mb = new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());
mb.usePCI(new SoundCard());
} }
07-面向对象(多态的扩展示例)
package myFirstCode;
/*
* 需求:数据库的操作。
*
* 数据是:用户信息。
* 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 implements UserInfoDao
{
public void add(User user)
{
1. JDBC连接数据库
2. 使用sql添加语句添加数据
3. 关闭连接
}
public void delete(User user)
{
1. JDBC连接数据库
2. 使用sql添加语句删除数据
3. 关闭连接
}
} 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 DBOperate {
public static void main(String[] args) {
// TODO Auto-generated method stub
// UserInfoByJDBC ui = new UserInfoByJDBC();
// UserInfoByHibernate ui = new UserInfoByHibernate(); UserInfoDao ui= new UserInfoByJDBC(); //此处是多态
ui.add(user);
ui.delete(user); } }
08-面向对象(Object类-equals())
package myFirstCode; /*
* Object:是所有对象的直接或者间接父类,传说中的上帝。
* 该类中定义的肯定是所有对象都具备的功能。
* 任何对象都具备比较相同的功能(地址)
*
*
* Object 类中已经提供了对对象是否相同的比较方法。
*
* 如果自定义类中也有比较相同的功能,没有必要重新定义。
* 只要沿袭父类中的功能,建立自己特有的比较内容即可。这就是覆盖。
*/ class Demo //extends object
{
private int num;
Demo(int num)
{
this.num = num;
} 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 boolean compare(Demo d)
{
return this.num == d.num;
}
*/
} public class ObjectDemo { public static void main(String[] args) {
Demo d1 = new Demo(4);
Demo d2 = new Demo(5); Demo d3 = d1;
System.out.println(d1.equals(d2));
} }
09-面向对象(Object类toString())
Java 学习 day08的更多相关文章
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- 分享篇——我的Java学习路线
虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- Java学习心得之 HttpClient的GET和POST请求
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
随机推荐
- Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log
1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server ...
- 【Hadoop】如何形象描述大数据生态?
作者:千岁大王链接:https://www.zhihu.com/question/27974418/answer/39845635来源:知乎著作权归作者所有,转载请联系作者获得授权. Google内部 ...
- fabricjs line
let line1 = new fabric.Line([lineleft, lineheight, lineleft, 0], {//终止位置,线长,起始位置,top,这里是从项目中截下来的我用了变 ...
- javascript - 封装ajax
封装,使用有示例. // 封装示例: function ajax(url, method, params, done) { var xhr = null; method = method.toUppe ...
- Django与SQL语言中——NULL与空字符串的区别
SQL有指定空值的独特方式,它把空值叫做NULL. Null在数据库中表示 不知道的数据,主要有3种意思: 1)知道数据存在,但不知道具体值. 2)不知道数据是否存在. 3)数据不存在. 在SQL中, ...
- 【Excle数据透视】如何隐藏数据透视表字段的分类汇总
如下图:是显示数据透视表的分类汇总 那么我们现在想弄成以下这样,不显示分类汇总 如何操作呢? 步骤 单击数据透视表任意单元格→数据透视表工具→设计→分类汇总→不显示分类汇总 ***显示分类汇总*** ...
- 解决scrollView中嵌套viewPager的冲突问题
很简单,在外层ScrollView中添加android:fillViewport="true"属性,然后给viewPager添加一个固定高度
- MySQL 数据库备份种类以及经常使用备份工具汇总
mysql> flush tables with read lock; Query OK, 0 rows affected (0.00 sec) mysql> show master st ...
- 制作rpm包报错问题
在编译生成rpm包时,报错 ERROR 0001: file '***' contains a standard rpath '/usr/lib64'这是由于代码理由hardcode导致,解决问题有两 ...
- windows下简单配置squid反向代理服务器
下载windwosNT版本的squid下载地址: http://squid.acmeconsulting.it/download/squid-2.6.STABLE13-bin.zip 1.把squid ...