Java面向对象 ( 多态 | final关键字 | 接口 )

简介: Java面向对象 ( 多态 | final关键字 | 接口 )

本文介绍了Java面向对象编程中的多态概念,涉及父类引用指向子类对象、编译期和运行期的行为差异,以及final关键字对类、方法和变量的限制。同时讨论了接口的概念,包括接口的定义、实现和接口之间的继承关系。


前言:本篇文章是Java面向对象系列(四),会介绍到 多态 | final关键字 | 接口。

多态

Animal dog = new Dog();
  • 前提:二者存在直接或间接的继承关系.
  • 概念:用父类的引用变量指向子类对象,多态也称向上转型,将子类类型转为父类类型.
  • 作用:用父类类型表示任意的子类类型对象,利于程序扩展.

两个时间段:

•  编译期 --- 类型是父类类型.

•  运行期 --- 类型是具体的子类类型.

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

静态方法:不存在重写,编译看运行都看左边(父类).

//父类
 
public class Animal {
//成员方法
    public void eat(){
        System.out.println("吃东西");
    }
//静态方法
    public static void show(){
        System.out.println("动物");
    }
}
 
//子类  以狗为例
public class Dog extends Animal {   //继承父类
 
    public void eat(){
        System.out.println("狗吃骨头");//方法重写
    }
    public static void show(){
        System.out.println("狗");
    }
 
}
public class Test {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.eat();   //找左边
        Animal cat=new Cat();
        cat.eat();
        System.out.println("---------");
        dog.show();   //静态看父类
       
    }
 

运行结果:

  • 缺点:一旦转为父类类型,就不能调用子类中拓展的特有方法。
  • 解决方法:向下转型----将父类类型转为子类类型.
Animal dog = new Dog();   
Dog d = (Dog) dog
  • 转换时需要使用 instanceof 判断:
 public void putAnimal(Animal animal){
 
        System.out.println("放入动物");
//如果放入的动物不是狗类,例如放入猫类则错误
 
        if(animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.eat();
        }
        System.out.println("动物错误!");
    }

分别传入cat,dog:                                        运行结果:


final关键字

  • final 可以修饰类,方法,参数,成员变量(常量).
  • final 修饰的类不能被继承,所以不能修饰抽象类,例如Java中String类就是final修饰.
  • final 修饰的方法不能被重写.
  • final 修饰方法的参数,参数值在方法中不能被改变.
  • final 修饰的成员变量值不能改变,因此称为常量.
//1.在类定义时,值就确定,直接赋值,赋值后不能改变,建议用static修饰
    final static int A = 10;
//2.在类定义时,值不明确,必须在创建对象后在构造方法中赋值,每个对象中都有一个常量
    final int COUNT ;
    public demo1(){
        COUNT = 10;
    }
    public demo1(int COUNT){
        this.COUNT=COUNT;
    }

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


接口

概念及特点:

  • 接口可以看做是一种特殊的抽象类,里面可以包含抽象方法,但不能被创建对象;
  • 接口可以被类实现,实现类必须实现接口中定义的所有方法;
  • 接口和抽象类十分的类似,接口内部的方法也是默认抽象的,不可在内部实例化的,只能由接口的调用者去实现。
  • 接口通过关键字 interface定义;类通过implements关键字来实现接口。

代码演示:

 //interface关键字修饰接口
public interface MyInterface {
    int num = 10; // public static final int num = 10;
    void eat();  //public abstract void eat();
    //静态方法,可以直接通过接口名调用
    public static void test(){
    }
    //默认方法,被子类继承后调用
    default void test1(){
    }
}

注意:类实现接口后,要么重写接口中所有抽象方法,要么声明为抽象类

  •  一个类可以实现多个接口:
public class MyClass implements A,B{
    //Myclass类实现A,B接口
}
  •  一个接口可以继承多个接口:
public interface A extends B,C{  
    //A继承B,C接口
}
相关文章
|
5天前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
3天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
13 4
|
5天前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
8天前
|
Java
Java 多态趣解
在一个阳光明媚的午后,森林中的动物们举办了一场别开生面的音乐会。它们组成了一支乐队,每种动物都有独特的演奏方式。通过多态的魅力,狗、猫和青蛙分别展示了“汪汪”、“喵喵”和“呱呱”的叫声,赢得了观众的阵阵掌声。熊指挥着整个演出,每次调用 `perform()` 方法都能根据不同的动物对象唤起对应的 `makeSound()` 方法,展现了 Java 多态性的强大功能,让整场音乐会既有趣又充满表现力。
|
9天前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
|
Java
Java接口和抽象类
Java接口和抽象类
81 0
|
2月前
|
设计模式 Java
【惊天揭秘】Java编程绝技大曝光:接口、抽象类、静态类与非静态类的神秘面纱终被揭开!
【8月更文挑战第22天】Java支持面向对象编程,通过接口、抽象类、静态类(如枚举与工具类)及普通类实现设计原则。接口定义行为规范,允许多重继承;抽象类含未实现的抽象方法,需子类完成;静态类常为工具类,提供静态方法;普通类则实例化对象。恰当运用这些结构能提升程序质量。
33 2
|
5月前
|
设计模式 搜索推荐 Java
java接口和抽象类的区别,以及使用选择
java接口和抽象类的区别,以及使用选择
53 0
|
2月前
|
Java 开发者
Java中的接口和抽象类
Java中的接口和抽象类
26 3
|
3月前
|
网络协议 Java
Java面试题:什么是Java中的接口?与抽象类有什么区别?
Java面试题:什么是Java中的接口?与抽象类有什么区别?
31 0
下一篇
无影云桌面