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. zabbix日志监控

    一般情况下,日志最先反映出应用当前的问题,在海量日志里面找到我们异常记录,例如监控系统日志.nginx.Apache.业务日志,然后记录下来,并且根据情况报警. 1.日志监控项介绍 最主要的是监控日志 ...

  2. Angular 学习笔记——$rounte

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  3. 尝试一下markdown

    尝试一下markdown 简单介绍以下几个宏: __VA_ARGS__是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的 ...

  4. 有关CGRectGetMinX,CGRectGetMidX,CGRectGetMaxX图解

    CGRect size = CGRectMake(20, 20, 400, 400); //矩形中最小x值 ,size.x CGRectGetMinX(size) = 20; //矩形中最小y值 ,s ...

  5. Android学习(二十三)SubMenu 子菜单

    一.SubMenu子菜单 和功能菜单相似,但是可以添加子菜单. 二.实现步骤: 1.通过onCreateOptionsMenu方法创建子菜单,可以通过代码动态创建,也可以通过xml进行创建. 2.通过 ...

  6. 【Excle数据透视表】如何得到数据透视表中某个汇总行的明细数据

    例如: 现在想得到"北京 汇总"的明细数据,该怎么处理呢? 步骤 右键数据透视表任意单元格→数据透视表选项→启用显示明细数据→确定→单击"北京 汇总"行最后一个 ...

  7. Solution to Triangle by Codility

    question: https://codility.com/programmers/lessons/4 we need two parts to prove our solution. on one ...

  8. 正则化--L2正则化

    请查看以下泛化曲线,该曲线显示的是训练集和验证集相对于训练迭代次数的损失. 图 1 显示的是某个模型的训练损失逐渐减少,但验证损失最终增加.换言之,该泛化曲线显示该模型与训练集中的数据过拟合.根据奥卡 ...

  9. 中小企业 DevOps 从 0 到 1

    原文:http://www.sohu.com/a/145065274_262549 今天主要有四个课题: 先聊一聊 DevOps: 然后跟大家聊一聊运维知识的体系和职业发展: 再是中小企业基于开源的 ...

  10. CSS 选择器 :last-child与:last-of-type的区别

    :last-child----represents the last element among a group of sibling elements. CSS伪类 :last-child 代表在一 ...