Java--多态及抽象类与接口

1.多态

以不同参数调用父类方法,可以得到不同的处理,子类中无需定义相同功能的方法,避免了重复代码编写,只需要实例化一个继承父类的子类对象,即可调用相应的方法,而只需要维护附父类方法即可。

java 复制代码
package classExtends;

public class Quadrangle {      //定义四边形类
    private Quadrangle[] qtest = new Quadrangle[6];
    private int nextIndex = 0;
    public void draw(Quadrangle q) {
        System.out.println(qtest.length);
        if (nextIndex < qtest.length) {
            qtest[nextIndex] = q;
            System.out.println(nextIndex);
            nextIndex++;
        }
    }

    public static void main(String[] args) {
        Quadrangle q = new Quadrangle();    //实例化四边形Quadrangle对象,用于调用draw()方法
        q.draw(new Square());           //以Square正方形对象为参数调用draw()方法
        q.draw(new Paralllelogram());   //以Paralllelogram对象为参数调用draw()方法
    }
}

class Square extends Quadrangle {   //定义正方形
    public Square() {
        System.out.println("正方形");
    }
}

class Paralllelogram extends Quadrangle {    //定义平行四边形
    public Paralllelogram() {
        System.out.println("平行四边形");
    }
}

输出:
        正方形
        6
        0
        平行四边形
        6
        1

2.抽象类

2.1 关键字:abstract

一般将父类定义为抽象类,使用这个父类进行集成和多态处理;使用abstract关键字定义的类是抽象类,使用abstract关键字定义的方法是抽象方法;抽象类除了被继承外,无任何其他意义。

2.2 抽象类不可以实例化对象。

2.3 抽象方法没有方法体。

2.4 抽象类被继承后需要实现其中所有的抽象方法。

也就是保证以相同的方法名称,参数列表,相同的返回值类型创建出非抽象方法。

语法:

public abstract class Test{ //定义抽象类

abstract void testAbstract(); //定义抽象方法

}

3.接口

3.1 接口简介

接口就是抽象类的延伸,可以将接口看做纯粹的抽象类。

3.2 接口特点:

3.2.1 接口也是一种抽象类,不可以实例化对象。

3.2.2 接口中所有的方法没有方法体,且需要在其他类中被重写覆盖实现。

3.2.3 接口中所有的方法都没有方法体。

3.2.4 使用关键字【interface】进行定义。

语法:

public interface drawTest{

void draw();

}

1.public: 接口可以像类一样被权限修饰符修饰,但public关键字仅限于接口在与其同名的文件中被定义。

2.interface:定义接口关键字。

3.drawTest:接口名称。

3.2.5 一个类实现接口时使用关键字【implements】.

语法:

public class Parallelogram extends Quadrangle implements drawTest{

....//

}

3.2.6 接口中,方法必须被定义为publicabstract

2.3.7 接口中定义的任何字段都自动是【static 】和【final】的。

2.3.8 一个类可以实现多个接口

class 类名 implemets 接口1,接口2,接口3....接口n{

//.......

}

java 复制代码
package classExtends;

interface drawTest {         //定义接口
    public void draw();     //定义方法
}

//定义平行四边形类,继承四边形类,并实现接口drawTest
class ParallelogramgleUseInterface extends QuadrangleUseInterface implements drawTest {
    public void draw() {     //由于本类实现了接口drawTest,所以需要重写覆盖draw()方法
        System.out.println("平行四边形.draw()");
    }

    public void doAnything() {   //重写覆盖父类方法
        //someSentence;
    }
}

class SquareUseInterface extends QuadrangleUseInterface implements drawTest {
    public void draw() {
        System.out.println("正方形.draw()");
    }

    public void doAnything() {   //重写覆盖父类方法
        //someSentence;
    }
}


public class QuadrangleUseInterface {       //定义四边形类
    public void doAnything() {
        //someSentence;
    }

    public static void main(String[] args) {
        drawTest[] d = {new ParallelogramgleUseInterface(), new SquareUseInterface()};  //接口也可以进行向上转型操作
        for (int i = 0; i < d.length; i++) {
            d[i].draw();        //调用draw()方法
        }
    }
}

输出:
        平行四边形.draw()
        正方形.draw()
相关推荐
小陈工2 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey2 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
一定要AK6 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao6 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao6 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
lly2024066 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨6 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9996 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4946 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n7 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos