面向对象4

多态

同一事物,在不同时刻表现不同的状态

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

父类的引用变量,指向子类对象

前提:类之间要有继承关系

两个不同的时间段:

1.编译期: 写代码时,类型是父类类型

2.运行期: 运行代码时,类型是具体的子类类型

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

问题:一旦将子类类型转为父类类型,就不能调用子类中特有的方法

解决方法: 将父类类型 向下转换为 子类类型

转换时需要使用instanceof判断    表示父类类型中持有实际类型是否是指定类型

父类类型 instanceof 具体子类类型:  相同返回true,否则返回false

Animal dog = new Dog();

成员方法: 编译看左边,运行看右边

dog.eat();

dog.show();

静态成员方法:编译和运行都看左边

System.out.println(dog.num);

成员变量: 编译和运行都看左边

Dog d = (Dog)dog;向下转型,将父类类型转换为子类类型

优点: 可以提高程序的扩展性

Exception in thread "main" java.lang.ClassCastException: day4.duotai.Cat cannot be cast to day4.duotai.Dog

类转换异常,如Cat类不能转换为Dog类

final关键字

用于修饰类,方法,参数和成员变量(常量)

final修饰的类

是不能被继承的,所以不能修饰抽象类

例如Java中String类就是final修饰的

final修饰的方法

final修饰的方法不能被重写

final修饰的方法参数

final修饰的方法参数,参数值在方法中不能被改变

final修饰的成员变量值

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

情况1: 在类定义时,值就确定,直接赋值,赋值后值就不能改变的,所以建议使用static修饰

        final static int a =1;

情况2: 在类定义时,值不明确,必须在创建对象后,在构造方法对其进行赋值,每个对象中都拥有一个常量

        final int count;

        public FinalDemo() {
                this.count = 10;
        }

常量一般建议全部使用大写字母  多个单词之间用下划线连接

接口

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

例如USB接口  定义usb接口的规范,让其他设备去实现

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

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

主要也是用来定义功能的

Java中接口如何定义:   public interface Interface{ }

interface关键字修饰 接口

接口可以定义的内容:

jdk8之后接口可以定义常量,抽象方法,静态方法,默认方法

jdk8之前只能定义常量和抽象方法

所有属性默认为: public static final

        int num = 10;

方法定义方式

        public void eat();

抽象方法,必须是public abstract定义

        public abstract void test();

静态方法,通过接口名可直接调用

        public static void test1(){}

默认方法,被子类继承后调用

        public default void test2(){}

接口不能实例化对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值