1;面向对象的三大特征
:封装性,继承性,多态性
extends继承或者implements 实现,是多态性的前提。
Fu类
public class Fu {
public void method(){
System.out.println("父类方法");
}
public void methodFU(){
System.out.println("父类方法");
}
}
ZI类
public class Zi extends Fu{
@Override
public void method(){
System.out.println("子类方法");
}
}
主类:
/*
代码当中体现多态性,其实就是:父类引用指向子类对象。
格式:
父类名称 对象名 =new 子类名称();
或者:
接口名称 对象名 = new 实现类名称();
*/
public class Demo01Multi {
public static void main(String[] args) {
//使用多态的写法 父类引用指向子类对象
Fu obj =new Zi();
obj.method();
obj.methodFU();
}
}
2:多态中成员变量
Fu类
public class Fu {
int num = 10;
public void showNum(){
System.out.println(num);
}
}
Zi类
public class Zi extends Fu{
int num =20;
int age =16;
}
主类:
/*
访问成员变量的两种方式:
1.直接通过对象名称访问成员变量:等号左边是谁,优先用谁,没有则向上找。
2:直接通过成员方法访问,看该方法属于谁,优先用谁,没有向上找。
*/
public class Demo01Multi {
public static void main(String[] args) {
//使用多态的写法 父类引用指向子类对象
Fu obj =new Zi();
System.out.println(obj.num);
//System.out.println(obj.age);错误写法
System.out.println("==================");
obj.showNum();//子类没有覆盖重写,就是:10;
//子类如果覆盖重写,就是子:20
}
}
3:多态中成员方法
Fu类
public class Fu {
int num = 10;
public void showNum(){
System.out.println(num);
}
public void method(){
System.out.println("父类方法");
}
public void methodFu(){
System.out.println("父类特有方法");
}
}
Zi类
public class Zi extends Fu{
int num =20;
int age =16;
@Override
public void showNum(){
System.out.println(num);
}
@Override
public void method(){
System.out.println("子类方法");
}
public void methodZ(){
System.out.println("子类特有方法");
}
}
主类:
/*
在多态的代码中,成员方法的访问规则是:
看new的是谁,就优先用谁,没有向上找。
口诀:编译看左边,运行看右边。
对比一下:
成员变量:编译看左边,运行看左边。
成员方法:编译看左边,运行看右边。
*/
public class Demo02Multi {
public static void main(String[] args) {
Fu obj = new Zi();//多态
obj.method();//父子都有,优先用子
obj.methodFu();//子类没有,父类有,向上找父类
//编译看左边,左边是Fu,Fu当中没有methodZi方法,所以编译报错。
//obj.methodZi();
}
}
4:多态的好处:
5:对象的向转型
Animal类
package cn.itcast;
public abstract class Animal {
public abstract void eat();
}
Cat类
package cn.itcast;
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
主类:
package cn.itcast;
public class Dem01Main {
public static void main(String[] args) {
//对象的向上转型,就是,父类引用指向子类对象。
Animal animal = new Cat();
animal.eat();;
}
}
6:对象的向下转型:
7:instanceof关键字
Animal类
package cn.itcast;
public abstract class Animal {
public abstract void eat();
}
Cat类
package cn.itcast;
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void eatMouse(){
System.out.println("吃老鼠");
}
}
主类
package cn.itcast;
/*
如何才能知道一个父类引用的对象,未来是什么子类?
格式:
对象 instanceof 类名称
这将会得到了一个boolean值结果,也就是判断前面的对象不能当作后面的实例
*/
public class Demo02Instanceof {
public static void main(String[] args) {
Animal animal = new Cat();//本来是2一只猫
animal.eat();;//猫吃鱼
//如果希望调用子类特用方法,需要向下转型
//判断一下父类引用animal本身是不是Cat
if (animal instanceof Cat){
Cat cat = (Cat) animal;
cat.eatMouse();
}
}
}
8:笔记本案例分析
进行描述笔记本类,实现笔记本使用USB鼠标,USB键盘
.USB接口 :包含打开设备功能,关闭设备gonn。
.笔记本:包含开机功能,关机功能,使用USB设备功能
.键盘类:要实现USB接口,并具备敲击的方法
.鼠标类:要实现USB接口,具备点击的方法
USB类
package cn.itcast.day10.Demo0;
public interface USB {
public abstract void open();//打开设备
public abstract void close();//关闭设备
}
Mouse类
package cn.itcast.day10.Demo0;
//鼠标就是一个USB设备
public class Mouse implements USB {
@Override
public void open() {
System.out.println("打开鼠标");
}
@Override
public void close() {
System.out.println("关闭鼠标");
}
public void click(){
System.out.println("鼠标点击");
}
}
Keyboard类
package cn.itcast.day10.Demo0;
public class Keyboard implements USB{
@Override
public void open() {
System.out.println("打开键盘");
}
@Override
public void close() {
System.out.println("关闭键盘");
}
public void type(){
System.out.println("键盘输入");
}
}
Computer类
package cn.itcast.day10.Demo0;
import javax.jws.soap.SOAPBinding;
public class Computer {
public void powerOn(){
System.out.println("笔记本电脑开机");
}
public void powerOff(){
System.out.println("笔记本电脑关机");
}
//使用USB设备的方法,使用接口作为方法的参数
public void useDevice(USB usb){
usb.open();//打开设备
if(usb instanceof Mouse){//一定要先判断
Mouse mouse = (Mouse) usb;//向下转型
mouse.click();
}else if (usb instanceof Keyboard){
Keyboard keyboard =(Keyboard)usb;
keyboard.type();
}
}
}
主类
package cn.itcast.day10.Demo0;
import java.awt.event.KeyEvent;
public class DemoMain {
public static void main(String[] args) {
//首先创建一个笔记本电脑
Computer computer = new Computer();
computer.powerOn();
//准备一个鼠标,供电脑使用
// Mouse mouse = new Mouse();
//首先向上转型
USB usbMouse = new Mouse();
//参数是USB类型,我正好传递进去的是USB鼠标;
computer.useDevice(usbMouse);
//创建一个USB键盘
Keyboard keyboard =new Keyboard();//没有使用多态写法
//方法参数是USB类型,传递进去的是实现类dui'x
computer.useDevice(keyboard);//正确方法,向上转型
computer.powerOff();
}
}