day09多态

001

package hyq.day09;

/**
 * @Author: 强啊
 * @CreateTime: 2018-12-19 13:06
 * A:多态概述
 * 		某一个事物,在不同时刻表现出来的不同状态。
 * 		举例:				Cat c=new Cat();
 * 						Animal a=new Cat();
 * 			猫可以是猫的类型。猫 m = new 猫();
 * 			同时猫也是动物的一种,也可以把猫称为动物。动物 d = new 猫();
 * 	B:多态前提
 * 		a:要有继承关系。
 * 		b:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。
 * 		c:要有父类引用指向子类对象。
 * 			父 f =  new 子();
 * 	C:案例演示
 * 		代码体现多态
 */
public class demo01duotai {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.eat();

        System.out.println("-------------");


        Animal an = new Cat();
        an.eat();

    }
}
class Animal {
    public void eat() {
        System.out.println("动物吃饭");
    }
}
class Cat extends Animal {
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

002

A:多态中的成员访问特点
a:成员变量
编译看左边,运行看左边。
b:构造方法
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
c:成员方法
编译看左边,运行看右边。
d:静态方法
编译看左边,运行看左边。
(静态和类相关,算不上重写,所以,访问还是左边的)
B:案例演示
多态中的成员访问特点

package hyq.day09;

import javax.xml.transform.sax.SAXTransformerFactory;

/**
 * @Author: 强啊
 * @CreateTime: 2018-12-19 13:14
 * A:多态中的成员访问特点
 * 		a:成员变量
 * 			编译看左边,运行看左边。
 * 		b:构造方法
 * 			创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
 * 		c:成员方法
 * 			编译看左边,运行看右边。动态绑定,编译时看父类中有没有方法,保证编译可以通过,运行时调用子类的方法。
 * 		d:静态方法
 * 			编译看左边,运行看左边。
 * 			(静态和类相关,算不上重写,所以,访问还是左边的)
 * 	B:案例演示
 * 		多态中的成员访问特点
 */
public class demo02duotaitedian {
    public static void main(String[] args) {
        Father f = new Son();  // 成员变量:编译看左边,运行看左边。
        System.out.println(f.num);
        System.out.println("---------------");
        f.print();    //成员方法:编译看左边,运行看右边
        System.out.println("--------------");
        f.method();      //相当于Father.method(); 静态方法:编译看左边,运行看左边。(静态和类相关,算不上重写,所以,访问还是左边的)


    }
}
class Father{
    int num = 10;
    public void print(){
        System.out.println("父类成员方法");
    }
    public static void method() {
        System.out.println("父类的静态方法");
    }
}
class Son extends Father{
    int num = 20;

    public void print() {
        System.out.println("子类成员方法");
    }

    public static void method() {
        System.out.println("子类的静态方法");
    }
}

003多态的好处与弊端

1.弊端:不能使用子类特有的功能
解决:把父类的引用强制转换为子类的引用。(向下转型)
2多态的好处
a:提高了代码的维护性(继承保证)
b:提高了代码的扩展性(由多态保证)

004抽象类

抽象类:不能很精确的描述一类事物时,将此类设为抽象类
特点:(1)抽象类和抽象方法必须由abstract关键字修饰
抽象类: abstract class 类名 { }
抽象方法: public abstract void 方法名 ( ); //注意没有大括号
(2)抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
(3)抽象类不能实例化
(4)抽象类的子类:要不是抽象类,要不重写抽象类中的所有抽象方法

005接口中成员变量的特点,以及成员方法的特点?

成员变量:只能是常量,并且是静态的
默认修饰符:public static final
成员方法:只能是抽象方法。
默认修饰符:public abstract

006类与接口之间的关系

(1)类与类:继承关系,只能单继承,可以多层继承
(2)类与接口:实现关系,可以单实现,也可以多实现。
(3)接口与接口继承关系,可以单继承也可以多继承

007抽象类与接口的区别

(1)成员区别
抽象类:成员变量可以是变量也可以是常量,有构造方法,成员方法可以是抽象也可以不抽象。
接口:成员变量只能是常量,成员方法只能是抽象方法,没有构造方法。
(2)关系区别
类与类:继承,单继承
类与接口,实现,单实现,多实现
接口与接口:继承,单继承,多继承

猜你喜欢

转载自blog.csdn.net/GuiMa005/article/details/85107791