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的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. 分享篇——我的Java学习路线

    虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...

  4. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  5. Java学习心得之 HttpClient的GET和POST请求

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...

  6. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  7. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

随机推荐

  1. ElasticSearch高级查询

    ElasticSearch高级查询 https://www.imooc.com/video/15759/0 ElasticSearch查询 1,子条件查询:特定字段查询所指特定值 1.1query c ...

  2. EffectiveJava(11)Java中的clone

    java中的clone clone构造器及其静态工厂的变形 优点:它们不依赖于某一种很有风险的,语言之外的对象创建机制; 它们不要求遵守尚未制定好文档的规范 他们不会于final域的正常使用发生冲突 ...

  3. Android 四大组件学习之Server一

    上次学习了Android四大组件Activity之后,我们深刻理解了Activity.这次我们学习四大组件Service. Service与Activity的级别是一样的,都是Android系统不可缺 ...

  4. Ant Design Mobile 使用 rc-form

    引入: import { createForm } from 'rc-form'; 步骤一:绑定 form // 将form表单的api绑定到props,便于调用 const EditHeaderWr ...

  5. 【VBA】切换引用样式

    在Excle中有两种引用方式,例如:第一行第一列的单元格可以是:A1  也可以是R1C1 切换引用样式的代码如下: Sub 切换引用样式() Application.ReferenceStyle = ...

  6. 网站拓扑图(来自qq)

  7. lvs+keepalived+bind实现负载均衡高可用智能dns

    整体架构: 1.IP地址规划: Dns1:172.28.0.54 Dns2:172.28.0.55 Dr服务器主:172.28.0.57 Dr服务器从:172.28.0.67 Vip:172.28.0 ...

  8. layer 不居中的坑爹问题

    使用了该代码弹出一个图片.但居然不居中 var layer_index = layer.open({ type: 1, title: false, closeBtn: 0, area: '516px' ...

  9. eclipse 创建maven web错误Cannot change version of project facet Dynamic web module to 3.1解决方案

    Dynamic Web Module 选择“3.1”,java选择“1.8”,报错:Cannot change version of project facet Dynamic web module ...

  10. shell中的括号作用

    一.小括号,圆括号() 1.单小括号 ()    ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...