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关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
随机推荐
- python2 to3
http://blog.csdn.net/zhzh213/article/details/53842790 有个内部工具叫做2to3.py位置在Python3/tool/script文件夹. 首先CD ...
- git只拉取github部分代码的方法
需求:github某个项目所有代码太大,有600+M,甚至更大:只需要拉取部分代码,一是可以降低网络消耗,二是可以降低磁盘占用 分析了下空间占用情况:发现每个项目下的.git/objects/pack ...
- linux stdin(0)/ stdout(1) / stderr(2)
在shell中,每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout.标准错误stderr,三个系统文件的文件描述符分别为0,1.2.进程需要的输入来自stdin文件.进程的标准输 ...
- PS如何拉倒影效果
1 复制图形(一般是文字)并垂直翻转得到倒影的初步样子(最好倾斜一下,看起来逼真一些)就像下面的迅雷的样子.记住要栅格化文字. 2 用魔棒工具抠除原来的颜色,只剩下空的选区. 3 拉渐变
- C++ 11 可变模板参数的两种展开方式
#include <iostream> #include <string> #include <stdint.h> template<typename T&g ...
- Unity3D 中脚本执行的先后顺序
Unity3D本身自带有控制脚本执行先后顺序的方法: Edit ---> Project Settings ---> Script Execution Order ---> 值越小 ...
- #include <>与#include""区别
<>先去系统目录中找头文件,如果没有在到当前目录下找.所以像标准的头文件 stdio.h.stdlib.h等用这个方法. 而""首先在当前目录下寻找,如果找不到,再到系 ...
- redis中的事务(版本2.6.16)
一.命令支持 1.multi 开始事务 2.exec事务提交 3.取消事务discard 二.事务示例 1.示例 redis>set key1 20OKredis>mutilOKredis ...
- Laravel创建项目和安装PHPStorm IDE插件
一.win10下安装composer1.下载composer.phar,放入php的安装目录https://getcomposer.org/download/1.4.2/composer.phar 2 ...
- presentModalViewController方法,present一个透明的viewController,带动画效果
//假设需要被present的控制器实例为controller,controller的背景色设置为clearColor UIViewController * rootcontroller = self ...