package com.zhh.java.duotaixing;
/**1、Java面向对象多态性
* 1多态性的体现
* 1)方法的重写与重载
* 2)对象的多态性
* 2对象的多态性
* 向上转型,程序自动完成
* 父类 父类对象= 子类实例
* 向下转型,强制类型转换
* 子类 子类对象=(子类)父类实例
* (和基本数据类型的转换是一样的)
*
*/
class Father {
public void tell1() {
System.out.println("Father----tell1");
}
public void tell2() {
System.out.println("Father----tell2");
}
}//class
class Son extends Father {
//重写父类的tell1方法
@Override
public void tell1() {
System.out.println("Son----tell1");
}
public void tell3() {
System.out.println("Son----tell3");
}
}
public class DuoTaiDemo1 {
public static void main(String[] args) {
method2();
}
/**
* 向上转型
* 子类转型成父类
*/
public static void method1() {
Son son = new Son();
Father father = son;//向上转型
father.tell1();//重写之后调用的是被重写之后的tell1,也就是子类的tell;
father.tell2();
//无法调用tell3
}
/**
* 向下转型
* 父类转型成子类
*/
public static void method2() {
Father father = new Son();
Son son = (Son) father;//父类转型成子类(父类转型子类之前,必须子类转成父类 即:Father father = new Son())
son.tell1();
son.tell2();
son.tell3();
// Father father2 = new Father();
// Son son2 = (Son) father2; //这种写法会产生类型转换失败异常 java.lang.ClassCastException
}
}
package com.zhh.java.duotaixing;
/**
* 2、Java面向对象多态性的应用
*
*/
public class DuoTaiDemo2 {
public static void main(String[] args) {
/*这个方法中要的是父类的对象,我们传一个子类的对象就可以了
*相当于向上转型
* Son son = new Son();
Father father = son;//向上转型
*
*/
method1(new Son1());
method1(new Son2());
method1(new Son3());
}
public static void method1(Father1 father1) {
father1.father1Tell();
}
}
class Father1 {
public void father1Tell() {
System.out.println("Father1----father1Tell");
}
}
class Son1 extends Father1 {
public void son1Tell() {
System.out.println("Son1----son1Tell");
}
}
class Son2 extends Father1 {
public void son2Tell() {
System.out.println("Son2----son2Tell");
}
}
class Son3 extends Father1 {
}
package com.zhh.java.duotaixing;
/**
* 3、Java面向对象instanceof关键字
* instanceof判断对象是不是这个类的对象
*
*/
class Father01 {
public void tell1() {
System.out.println("Father----tell1");
}
public void tell2() {
System.out.println("Father----tell2");
}
}//class
class Son01 extends Father01 {
//重写父类的tell1方法
@Override
public void tell1() {
System.out.println("Son----tell1");
}
public void tell3() {
System.out.println("Son----tell3");
}
}
public class IntenceOfDemo {
public static void main(String[] args) {
Father01 father01 = new Father01();
//判断father01是不是Father01的对象
boolean isProject1 = father01 instanceof Father01;
//判断father01是不是Son01的对象
boolean isProject2 = father01 instanceof Son01;
System.out.println(isProject1);
System.out.println(isProject2);
/*打印结果是
* true
false
*/
Father01 father02 = new Son01();
boolean isProject3 = father02 instanceof Father01;
boolean isProject4 = father02 instanceof Son01;
System.out.println(isProject3);
System.out.println(isProject4);
/*打印结果是
* true
true
可见向下转型之后对象既是子类对象又是父类对象
实际上是父类对象,因为对象调不到子类中的tell3()方法
*/
}
}
package com.zhh.java.duotaixing;
/**
* 4、Java面向对象抽象类应用
*
*/
abstract class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
abstract void want();
}
class Student extends Person {
private int score;
public Student(String name, int age, int score) {
super(name, age);
this.score = score;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
void want() {
System.out.println("姓名" + getName() + "年龄" + getAge() + "成绩" + getScore());
}
}
class Worker extends Person {
private int money;
public Worker(String name, int age, int money) {
super(name, age);//调用父类的构造方法,如果删掉会默认为 super(name, age)
this.money = money;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
@Override
void want() {
System.out.println("姓名" + getName() + "年龄" + getAge() + "收入" + getMoney());
}
}
public class ChouXingLeiDemo1 {
public static void main(String[] args) {
Student student = new Student("aaa", 12, 12);
student.want();
Worker worker = new Worker("bbb", 35, 35);
worker.want();
}
}
package com.zhh.java.duotaixing;
/**
*5、Java面向对象接口的使用
*这个程序设计还是很好的,需要反复看
*
*/
/**
* 定义use接口
*/
interface Usb {
void Start();
void stop();
}
/**
* 定义一个电脑类,传递Usb接口
*
*/
class Computer {
public static void work(Usb usb) {
usb.Start();
System.out.println("正在工作。。。");
usb.stop();
}
}
/**
* 写一个U盘的类
*
*/
class UPan implements Usb {
@Override
public void Start() {
System.out.println("u盘开始工作");
}
@Override
public void stop() {
System.out.println("u盘结束工作");
}
}
/**
*
* 写一个打印机的类
*/
class Printer implements Usb {
@Override
public void Start() {
System.out.println("打印机开始工作");
}
@Override
public void stop() {
System.out.println("打印机结束工作");
}
}
/**
* 用来调用的类,是程序入口
*
*/
public class JieKouDemo1 {
public static void main(String[] args) {
new Computer().work(new UPan());
new Computer().work(new Printer());
}
}
http://download.csdn.net/detail/zhaihaohao1/8741715
视频下载:
http://c38.yunpan.360.cn/my/index/#%2F%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91%2Fjava%2F