第四章(四)多态

多态

父类引用指向子类对象,从而产生多种形态

多态:
      同一种事物在不同时刻的不同状态

      父类的引用变量 指向子类对象
      前提:有继承关系
      构成多态
两个不同时间段:
       1.编译期:写代码时   类型是Animal(父亲类型)
       2.运行期:运行代码时  类型是具体子类类型

       多态也称为向上转型,将子类类型转为父类类型

       用户父类类型表示任意子类类型对象,利于程序扩展

public class Animal {
    private String name;
    private int age;

    public void eat(){
        System.out.println("吃东西");
    }
}
public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}
public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
public class BX {
    public void putAnimal(Animal animal){
        System.out.println("把动物装进冰箱");
    }

    public void putObject(Object object){

    }
}
public class Test {
    public static void main(String[] args) {
         /*
 多态:
       同一种事物在不同时刻的不同状态

       父类的引用变量 指向子类对象
       前提:有继承关系
       构成多态
 两个不同时间段:
        1.编译期:写代码时   类型是Animal(父亲类型)
        2.运行期:运行代码时  类型是具体子类类型

        多态也称为向上转型,将子类类型转为父类类型

        用户父类类型表示任意子类类型对象,利于程序扩展
 */
        Animal dog=new Dog();
        dog.eat();
        Animal cat=new Cat();
        cat.eat();
        BX bx=new BX();
        bx.putAnimal(dog);
        bx.putAnimal(cat);


    }
}

final关键字

final修饰类,方法,参数,成员变量

final修饰的类不能被继承,所以不能修饰抽象类, 例如:java中的String是final修饰的

final修饰的方法不能被重写

final修饰的方法参数不能被改变

final修饰的成员变量值不能改变,因此称为成员变量

    //情况一:在类定义时,值确定,直接赋值,赋值后值不能改变,
    // 所以建议static修饰
    final static int NUM=10;
 final int a;
    //情况二:在类定义时,值不明确,必须在创建对象后,在构造方法对其赋值,
    // 每个对象中拥有一个常量
    public Final(){
        this.a=20;
    }
    public Final(int a){
        this.a=a;
    }

接口

接口是计算机领域的名词,表示一种功能的定义

接口可以看作是一种特殊的抽象类,里面也可以包含抽象方法

接口不能创建对象,被其他类实现,重写抽象方法.

主要也是用来定义功能的.


import com.ffyc.javaoop.jiekou.demo1.Jka;
import com.ffyc.javaoop.jiekou.demo1.Jkb;

/*
    interface 关键字修饰  接口
    接口中可以定义的内容:
        jdk8之后接口可以定义:常量,抽象方法,静态方法,默认方法
        JDK8之前接口只能定义:常量,抽象方法,
*/
public interface Myinterface extends Jka, Jkb {
    int num=10;//默认 public static final int num = 10;

    void eat();// public abstract void eat();

    //静态方法  可以直接通过接口名调用
    public static void test(){

    }

    //默认方法  被子类继承后调用
    default void test1(){

    }

}
package com.ffyc.javaoop.jiekou.demo1;

/*
    类 通过implements关键字实现接口

    类 实现接口后,要么重写接口中所有抽象方法
       要么将该类定义为抽象类

       一个类可以直接继承一个类
       一个类可以实现多个接口
       一个接口可以继承多个接口
*/
public class Myclass extends Object implements Myinterface, Jkb, Jka {
    @Override
    public void eat() {

    }

    @Override
    public void test1() {

    }
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值