多态
父类引用指向子类对象,从而产生多种形态
多态:
同一种事物在不同时刻的不同状态
父类的引用变量 指向子类对象
前提:有继承关系
构成多态
两个不同时间段:
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() {
}
}