欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

接口、继承和多态

程序员文章站 2022-06-13 21:13:29
...
package com.java.exp10;

import sun.font.EAttribute;

/**
 * 1、类的继承
 *  继承并不只是扩张父类的功能,还可以重写父类的成员方法。
 *  重写,保留父类的成员方法的名称,重写成员方法的实现内容,更改成员方法的存储权限或更改返回值类型。
 *  重构,与父类的成员方法返回值、方法名称、参数类型及个数完全相同,唯一不同的是方法的实现内容。
 *  重写父类方法时,修改方法的修饰权限只能从小范围到大的范围改变。
 *  实例化子类对象时,父类无参构造方法被自动调用,但有参构造方法并不能被自动调用,只能依赖于super关键字显式地调用父类的构造方法
 * 2、Object类
 *  Object类中的getClass()、notify()、notifyAll()、wait()等方法不能被重写。为final类型
 *  getClass()方法
 *  toString()方法    将一个对象返回为字符串形式
 *  equals()方法      比较的是两个对象的实际内容
 * 3、对象类型的转化
 *  3.1、向上转型    直接使用,继承于抽象,可看作父类的一种
 *  3.2、向下转型    使用显式类型转换,向编译器指明将父类对象转换为哪一种类型的子类对象
 * 4、使用instanceof操作符判断对象类型
 *  myobject instanceof ExampleClass
 *  某类的饮用对象         某个类
 *  instanceof是Java语言中的关键字,在Java语言中的关键字都为小写,其返回值是Boolean类型的
 * 5、方法的重载
 *  方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要这些方法的参数个数或者类型不同即可。
 * 6、多态
 *  Java实现多态有三个必要条件:继承、重写、向上转型
 *  提高了代码的扩展性
 * 7、抽象类和接口
 *  7.1、抽象类
 *      abstract是定义抽象类的关键字,它定义的方法称为抽象方法,抽象方法没有方法体
 *      继承抽象类的所有子类必须将抽象类中的抽象方法记性覆盖
 *      抽象类不能实例化对象
 *  7.2、接口
 *      接口简介
 *      接口是抽象类的延伸,可以将它看作纯粹的抽象类,接口中的所有方法都没有方法体
 *      在接口中定义的方法必须被定义为public或abstract形式,其他修饰权限不被Java编译器认可
 *      在接口中定义的任何字段都自动是static和final的
 *      接口与继承
 *      Java中不允许多重继承,但是使用接口就可以实现多重继承,以为一个类可以实现多个接口,使用逗号隔开就可以
 * 
 * */
public class Demo {
    public static void main(String[] args) {
        Demo demo = new Demo();
        String str = demo.getClass().getName();

        System.out.println(str);
    }
}

Animal类

package com.java.exp10;

public class Animal {

    public void shout(Animal animal){
        System.out.println("叫...");
    }
    public static void eat(Animal animal){
        System.out.println("吃...");
    }
}

Dog类

package com.java.exp10;

public class Dog extends Animal {
    public void eat(){
        System.out.println("啃骨头...");
    }
    //向上转型后只能实现父类中的方法,即使在子类中重写过了,因为使用的是父类的对象,所以不能调用子类
    public static void main(String[] args) {
        Dog dog = new Dog();
        eat(dog);
    }
}

Person类

package com.java.exp10;

public class People {
    String name;
    int age;


    public People() {
        System.out.println("父类无参构造方法被调用...");
    }
    public People(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("父类有参构造方法被调用...");
    }
}

Student类

package com.java.exp10;

public class Student extends People {
    String name;
    int age;

    public Student() {
        System.out.println("子类无参构造方法被调用...");
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("子类有参构造方法被调用...");
    }

    public static void main(String[] args) {
        Student stu = new Student("张三",15);
    }
}