Java基础快速入门:面向对象高级之接口、多态与内部类

快速了解Java与C#的区别(继承、接口、多态) 接触过C#语言的人想要进入Java语言的学习,我们要学会在i+1的基础上进行,即通过了解两种语言的区别来快速的了解Java语言。在了解两者区别之前我们现了解一下这两种语言。 一、Java Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。 一... 阅读详情

本文纲要

  1. 概述
  2. 信息管理系统 - 集合改进
  3. 信息管理系统 - 抽取公共 DAO
  4. 接口介绍
  5. 接口定义和特点
  6. 接口中的成员特点(JDK7及以前)
  7. JDK8:默认方法
  8. JDK8:静态方法
  9. JDK9:私有方法
  10. 类和接口的关系
  11. 信息管理系统 - 接口改进
  12. 信息管理系统 - 问题分析与多态引入
  13. 多态前提条件
  14. 多态成员访问特点
  15. 多态的好处和弊端
  16. 多态的转型
  17. 多态转型风险和解决方案
  18. 信息管理系统 - 多态改进
  19. 内部类 - 成员内部类
  20. 私有成员内部类 - 静态成员内部类
  21. 局部内部类
  22. 匿名内部类
  23. 匿名内部类的使用场景

概述

本文将从一个学生信息管理系统的优化过程出发,逐步讲解 Java 面向对象高级特性:接口、多态与内部类

信息管理系统 完整项目代码结构如下(省略包完整路径)

wb-edu-info-manager 
├── controller 
│   ├── BaseStudentController.java 
│   ├── OtherStudentController.java 
│   ├── StudentController.java 
│   └── TeacherController.java 
├── dao 
│   ├── BaseStudentDao.java        (接口)
│   ├── OtherStudentDao.java       (集合实现)
│   ├── StudentDao.java            (数组实现)
│   └── TeacherDao.java 
├── domain 
│   ├── Person.java 
│   ├── Student.java 
│   └── Teacher.java 
├── entry 
│   └── InfoManagerEntry.java 
├── factory 
│   └── StudentDaoFactory.java 
└── service 
    ├── StudentService.java 
    └── TeacherService.java

test-interface
├── test1 
│   ├── Inter.java 
│   ├── InterA.java 
│   ├── InterImpl.java 
│   └── Test1Interface.java 
├── test2 
│   ├── Inter.java 
│   └── TestInterface.java 
├── test3 
│   ├── InterA.java 
│   ├── InterB.java 
│   └── TestInterface.java 
├── test4 
│   ├── InterA.java 
│   ├── InterB.java 
│   └── TestInterface.java 
├── test5
│   ├── Inter.java 
│   └── TestInferface.java 
├── test6 
│   ├── Fu.java 
│   ├── Inter.java 
│   └── TestInterface.java 
└── test7 
    ├── InterA.java 
    ├── InterB.java 
    ├── InterC.java 
    ├── InterImpl.java 
    └── TestInterface.java 

test-innerclass
├── test1 
│   └── Test1Inner.java  
├── test2 
│   └── Test2Innerclass.java  
├── test3 
│   └── Test3Innerclass.java  
├── test4 
│   └── Test4Innerclass.java  
├── test5
│   └── Test5Innerclass.java  
└── test6 
    └── TestSwimming.java 


test-polymorpic
├── test1 
│   └── Test1Polymorphic.java 
├── test2 
│   └── Test2Polymorphic.java 
├── test3 
│   └── Test3Polymorphic.java 
└── test4
    └── Test4Polymorphic.java 

信息管理系统 - 集合改进

在之前的信息管理系统中,我们使用数组作为数据存储容器。
随着开发推进,数组容器的弊端逐渐暴露:

  • 长度固定,无法自动扩容;
  • 缺少现成的增删改查方法,所有操作需要手动实现。

为了提升开发效率和代码简洁性,我们把数组替换为 ArrayList 集合。替换过程中保留原有基于数组的实现代码(遵循开闭原则),新建一个 OtherStudentDao 类来完成基于集合的存储。

代码改进关键点(OtherStudentDao):

public class OtherStudentDao implements BaseStudentDao {
    // 将原来 Student[] 替换为 ArrayList 
    private static ArrayList<Student> stus = new ArrayList<>();
 
    static {
        Student stu1 = new Student("heima001","张三","23","1999-11-11");
        Student stu2 = new Student("heima002","李四","24","2000-11-11");
        stus.add(stu1);
        stus.add(stu2);
    }
 
    // 添加:直接使用集合自带的 add 
    public boolean addStudent(Student stu) {
        stus.add(stu);
        return true;   // 集合会自动扩容,因此永远添加成功 
    }
 
    // 查看:从集合取出放入数组再返回,保持接口一致 
    public Student[] findAllStudent() {
        Student[] students = new Student[stus.size()];
        for (int i = 0; i < students.length; i++) {
            students[i] = stus.get(i);
        }
        return students;
    }
 
    // 删除:调用 remove 方法 
    public void deleteStudentById(String delId) {
        int index = getIndex(delId);
        stus.remove(index);
    }
 
    // 修改:调用 set 方法 
    public void updateStudent(String updateId, Student newStu) {
        int index = getIndex(updateId);
        stus.set(index, newStu);
    }
 
    // 根据 ID 查找索引 
    public int getIndex(String id) {
        int index = -1;
        for (int i = 0; i < stus.size(); i++) {
            Student stu = stus.get(i);
            if(stu != null && stu.getId().equals(id)){
                index = i;
                break;
            }
        }
        return index;
    }
}

此后,只需将 StudentService 中使用的 DAO 对象从 StudentDao切换为 OtherStudentDao 即可

信息管理系统 - 抽取公共 DAO

StudentDao(数组)和 OtherStudentDao(集合)中存在大量相同的方法声明,只是内部实现不同。为了提高代码复用性和结构清晰度,我们可以向上抽取一个父类 BaseStudentDao,将这些共性方法定义为抽象方法,再由两个子类各自实现。

抽取后的结构:

public abstract class BaseStudentDao {
    public abstract boolean addStudent(Student stu);
    public abstract Student[] findAllStudent();
    public abstract void deleteStudentById(String delId);
    public abstract int getIndex(String id);
    public abstract void updateStudent(String updateId, Student newStu);
}

StudentDao 和 OtherStudentDao 分别继承 BaseStudentDao 并重写所有抽象方法。这样的设计也是后文接口思想的雏形。

接口介绍

当 BaseStudentDao 中所有方法都是抽象方法时,这个类就可以改进为接口(interface)。接口的作用:
定义规则:它规定了实现类必须具备哪些方法,任何“学生库管对象”都必须实现增删改查等方法。
程序扩展:不同实现可以互相替换,系统更易扩展。

生活中的类比:USB 接口既是一种形状规则(标准),也能连接鼠标、U盘等外部设备(扩展)。

接口定义和特点

定义格式

public interface 接口名 {
    // 抽象方法(可省略 public abstract)
    void 方法名();
}

实现接口

public class 实现类 implements 接口 {
    @Override 
    public void 方法名() { …… }
}

特点
接口不能实例化(new Inter() 错误)。
类和接口之间是实现关系(implements),支持单实现和多实现。
实现类必须重写接口中所有抽象方法,或者将自己也声明为抽象类。

示例:

public interface Inter {
    void study();
}
 
public interface InterA {
    void print1();
    void print2();
}
 
// 多实现 
public class InterImpl implements Inter, InterA {
    @Override 
    public void study() {
        System.out.println("我是实现类中的study方法");
    }
    @Override 
    public void print1() { }
    @Override 
    public void print2() { }
}

多实现不会产生逻辑冲突,因为接口中的方法都是抽象方法,没有方法体,实现类只需提供具体实现即可。

接口中的成员特点(JDK7及以前)

成员变量:只能是常量,系统默认添加 public static final

int NUM = 10;   // 等价于 public static final int NUM = 10;

构造方法:接口没有构造方法,因为不能实例化。但实现类中的 super() 访问的是 Object 的构造方法。
成员方法:只能是抽象方法,系统默认添加 public abstract

void show();   // 等价于 public abstract void show();

JDK8:默认方法

接口升级时,新增抽象方法会导致所有实现类必须全部重写,维护成本高。
JDK8 允许在接口中定义默认方法(default method),即带有方法体的非抽象方法

public interface InterA {
    public default void show() {
        System.out.println("我是A接口中的show方法");
    }
}

默认方法不强制要求实现类重写,可以直接使用。
也可以被重写,但重写时不能带 default 关键字。
如果实现类实现了多个接口,且这些接口中存在相同方法声明的默认方法,则必须重写该方法,否则编译报错。

JDK8:静态方法

JDK8 还允许接口中定义静态方法

public interface InterA {
    public static void show() {
        System.out.println("InterA...show");
    }
}

静态方法只能通过接口名直接调用(InterA.show()),不能通过实现类对象或实现类名调用。
多个接口中即使存在同名的静态方法也不会冲突,因为调用时必须指定接口名。

JDK9:私有方法

当默认方法中出现重复代码时,可以抽取为一个私有方法,以提高复用性。

public interface Inter {
    public default void start() {
        System.out.println("start方法执行了...");
        log();
    }
    public default void end() {
        System.out.println("end方法执行了...");
        log();
    }
    private void log(){
        System.out.println("日志记录 (模拟)");
    }
 
    // 静态方法中的重复逻辑也可以抽取为私有静态方法 
    private static void check(){
        System.out.println("权限校验 (模拟)");
    }
    public static void open() {
        check();
        System.out.println("open方法执行了");
    }
    public static void close(){
        check();
        System.out.println("close方法执行了");
    }
}

私有方法只能在本接口内部使用,弥补了 JDK8 默认方法代码复用的缺陷。
私有静态方法服务于接口内部的静态方法。

类和接口的关系

类与类:继承关系,只能单继承、可以多层继承。

类与接口:实现关系,可以单实现、也可以多实现,并且可以在继承一个类的同时实现多个接口。
当父类和接口中存在相同声明的方法时,优先使用父类的逻辑。

接口与接口:继承关系,可以单继承、也可以多继承。
若多继承的接口中存在相同声明的默认方法,子接口必须重写该方法。

public interface InterA {
    default void method() { System.out.println("InterA...method"); }
}
public interface InterB {
    default void method() { System.out.println("InterB...method"); }
}
public interface InterC extends InterA, InterB {
    @Override 
    default void method() {
        System.out.println("InterC接口,解决冲突,重写method");
    }
}

信息管理系统 - 接口改进

根据接口思想,将之前抽取的抽象类 BaseStudentDao 改为接口:

public interface BaseStudentDao {
    boolean addStudent(Student stu);
    Student[] findAllStudent();
    void deleteStudentById(String delId);
    int getIndex(String id);
    void updateStudent(String updateId, Student newStu);
}

StudentDao 和 OtherStudentDao 改为实现该接口:

public class OtherStudentDao implements BaseStudentDao { ... }
public class StudentDao implements BaseStudentDao { ... }

此时,DAO 之间的“规则”完全由接口定义,符合面向接口编程的思想。

信息管理系统 - 问题分析与多态引入

StudentService 中直接创建具体的 DAO 对象:
private OtherStudentDao studentDao = new OtherStudentDao();

这导致 Service 和 DAO 的耦合度很高。如果需要切换存储方案(数组 ↔ 集合),就必须修改 Service 的代码

为了解耦,我们引入工厂模式和多态:

  1. 创建 StudentDaoFactory 工厂类,提供静态方法 getStudentDao() 返回 DAO 对象。
  2. 在 StudentService 中通过工厂获取 DAO 对象。

但要想“无论方法返回哪种 DAO 对象,Service 都能接收且不需要修改代码”,就需要用到多态。

多态前提条件

多态指的是同一个对象在不同时刻表现出来的不同形态

代码体现:

Animal a = new Cat();   // 猫这个事物,此刻表现为“动物”形态 
Cat c = new Cat();      // 此刻表现为“猫”的形态 

实现多态的三个前提:

  1. 要有继承/实现关系;
  2. 要有方法重写;
  3. 父类引用指向子类对象(Animal a = new Cat();)。

多态成员访问特点

成员变量:编译看左边(父类),运行看左边(父类)。
成员方法:编译看左边(父类),运行看右边(子类)。

class Fu {
    int num = 10;
    public void method() { System.out.println("Fu.. method"); }
}
class Zi extends Fu {
    int num = 20;
    public void method() { System.out.println("Zi.. method"); }
}
// 测试 
Fu f = new Zi();
System.out.println(f.num);   // 输出 10 (变量看父类)
f.method();                  // 输出 “Zi.. method” (方法看子类)

多态的好处和弊端

好处:提高程序扩展性。方法参数如果定义为父类类型,就可以接收该父类的任意子类对象。

public static void useAnimal(Animal a) {  // 参数为父类 Animal 
    a.eat();
}
// 调用时可以传入 Dog 或 Cat 
useAnimal(new Dog());
useAnimal(new Cat());

弊端:不能调用子类特有的成员(因为编译时只看父类是否有该方法)。
解决方案:

  1. 直接创建子类对象调用(最简单);
  2. 使用向下转型。

多态的转型

向上转型:父类引用指向子类对象。Fu f = new Zi();
向下转型:把父类引用转换回子类引用,需要强转。

Fu f = new Zi();
Zi z = (Zi) f;      // 向下转型 
z.method();         // 调用子类特有方法 

多态转型风险和解决方案

风险:如果父类引用实际指向的不是目标子类,强转时会抛出 ClassCastException。

Animal a = new Cat();
Dog dog = (Dog) a;   // a 实际是 Cat,运行时异常!

解决方案:使用 instanceof进行类型判断。

if(a instanceof Dog){
    Dog dog = (Dog) a;
    dog.watchHome();
}

信息管理系统 - 多态改进

结合多态完成最终解耦:

工厂类(返回值为接口类型 BaseStudentDao):

public class StudentDaoFactory {
    public static BaseStudentDao getStudentDao(){
        return new OtherStudentDao();   // 需要切换时只需改这里 
    }
}

Service 类(使用接口类型接收):

public class StudentService {
    // 多态:接口引用指向实现类对象 
    private BaseStudentDao studentDao = StudentDaoFactory.getStudentDao();
    // 之后所有调用均通过 studentDao,完全不依赖具体实现 
    public boolean addStudent(Student stu) {
        return studentDao.addStudent(stu);
    }
    ...
}

至此,StudentService 的代码不再需要修改,只需更改工厂类中的返回值即可切换存储方案。成功解耦。

内部类 - 成员内部类

内部类即定义在另一个类内部的类。

成员内部类:定义在类中方法外。

class Outer {
    private int a = 10;
    class Inner {
        int num = 10;
        public void show(){
            System.out.println("Inner..show");
            System.out.println(a);   // 内部类可直接访问外部类成员,包括私有 
        }
    }
}

外界创建内部类对象格式:

Outer.Inner i = new Outer().new Inner();
i.show();

私有成员内部类 - 静态成员内部类

私有成员内部类:只能在外部类内部创建对象并访问。

class Outer {
    private class Inner {
        public void show(){ System.out.println("inner..show"); }
    }
    public void method(){
        Inner i = new Inner();
        i.show();
    }
}

静态成员内部类:访问格式不同。

class Outer {
    static class Inner {
        public void show(){ System.out.println("inner..show"); }
        public static void method(){ System.out.println("inner..method"); }
    }
}
// 创建对象 
Outer.Inner oi = new Outer.Inner();
oi.show();
// 静态方法:类名调用 
Outer.Inner.method();

局部内部类

定义在方法中的类,作用域仅限该方法内。

class Outer {
    public void method() {
        int b = 20;
        class Inner {
            public void show() {
                System.out.println("show...");
                System.out.println(b);   // 可直接访问方法内局部变量(JDK8+ 需变量为 effectively final)
            }
        }
        Inner i = new Inner();
        i.show();
    }
}

匿名内部类

本质是一种特殊的局部内部类,将继承/实现、方法重写、创建对象三步合并为一步。

前提:存在一个类或接口。

格式:

new 类名/接口名() {
    // 重写方法 
};

示例:

new Inter() {
    @Override 
    public void show() {
        System.out.println("我是匿名内部类中的show方法");
    }
}.show();

当接口中有多个方法时,可用父类/接口引用接收:

Inter2 i = new Inter2() {
    @Override 
    public void show1() { System.out.println("show1..."); }
    @Override 
    public void show2() { System.out.println("show2..."); }
};
i.show1();
i.show2();

匿名内部类的使用场景

当方法的参数是一个接口或抽象类时,可以传递匿名内部类作为实参,使代码更简洁。

public static void goSwimming(Swimming swimming) {
    swimming.swim();
}
// 调用 
goSwimming(new Swimming() {
    @Override 
    public void swim() {
        System.out.println("铁汁, 我们去游泳吧");
    }
});

总结

本文以信息管理系统优化为线索,逐步引入了 Java 中接口、多态和内部类三大面向对象高级特性。

从数组到集合,从抽取公共类到接口设计,再到工厂模式+多态解耦,完整展示了代码优化的演变过程。掌握这些特性,能够帮助你写出更灵活、扩展性更强的 Java 程序。

GEE:基于MODIS数据计算NDVI时间序列,并使用Savatsky-Golay(SG)滤波器对其进行平滑处理 优快云@_养乐多_本文将介绍如何在 Google Earth Engine (GEE) 平台中,使用 MODIS 数据计算 NDVI 时间序列,并对该数据集应用 Savitzky-Golay 滤波器,得到了一个新的平滑后的数据集。Savitzky-Golay 滤波器可以有效地去除信号中的噪声,并平滑信号的变化。该方法可以扩展到基于 MODIS 数据计算的任何指数或者波段。 阅读详情

相关推荐

大专非科班拿下汇丰外包Java岗:我的TEKSystem面试全流程复盘(含IKM笔试真题)

本文详细记录了一位非科班大专生成功通过TEKSystem面试,拿下汇丰银行Java外包岗位的全过程。从IKM全英文笔试到技术面试,作者分享了7个关键转折点的实战经验,包括简历优化、技术考点、英语面试策略及薪酬谈判技巧,特别适合初级Java开发者参考。

weixin_30074763的博客 394

Java面向对象编程:从基础到高级

修饰符] class 类名{1.成员变量//2.构造方法3.成员方法访问权限 返回类型 方法名(形参){类名要符合见名知义的原则,首字母要大写,以多个单词组成的类名的每个单词首字母均大写。//举例int age;

2301_80888241的博客 1084

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2842

【JAVA基础】由C++快速上手Java(超详细)

JavaSE基础课程涉及到的很多内容在学习C++的过程都有涉及,在这里做一个由C++基础开始学习java的快速入门经验总结。

2301_76391858的博客 2662

cs188Inference in Bayes Nets(贝叶斯网络的推理)

cs188Inference in Bayes Nets贝叶斯网络的推理Question1(3 points):Bayes Net StructureQuestion2(1 points):Bayes Net ProbabilitiesQuestion 3(5 points):Join FactorsQuestion4(4 points):EliminateQuestion5(4 points):NormalizeQuestion 6(4 points):Variable EliminationQuesti

weixin_46582817的博客 1674

网络攻防实验——网络监听

利用CAIN实现ARP监听。

Trieyes_of_feng的博客 3197

java se 快速入门

Java是一种高级编程语言,由Sun Microsystems公司于1995年推出。Java具有跨平台性、面向对象、健壮性、安全性、可移植性等特点,被广泛应用于企业级应用开发、移动应用开发、大数据处理、云计算等领域。Java程序可以在不同的操作系统上运行,只需编译一次,就可以在任何支持Java虚拟机(JVM)的平台上运行。Java还提供了丰富的库和框架,可以加快开发过程,提高开发效率。java 体系java se:java基础-- 如果做java web方向开发和 安卓开发,这个必学。

go|Python的个人博客 2161

c#算法(5)—最小二乘法(二次曲线拟合)

最小二乘法——二次曲线拟合

qq_34059233的博客 1659

帮你快速了解Java抽象类、接口和多态

大家好,我是KookNut39也是Tommy,在优快云写文,写Java时候我是Tommy,分享一些自己认为在学习过程中比较重要的东西,致力于帮助初学者入门,希望可以帮助你进步。感兴趣的欢迎关注博主,和博主一起学习Java知识。大家还可以去专栏查看之前的文章,希望未来能和大家共同探讨技术。 文章目录面向对象特征——多态1.抽象类2.接口多态final关键字 面向对象特征——多态 学习多态之前我们应该先学习抽象类和接口,因为抽象类和接口是实现多态的前提。 1.抽象类 如果自上而下在类的继承层次结构中上移.

KOOKNUT的博客 1324

ASPICE标准快速掌握「2.1. 过程能力概览」

一个项目的质量流程是否做的好最终会需要由一个指标来确定,ASPICE将其称为过程能力(Process capability),过程能力是一个综合的判定概念。而为了实现这个概念,ASPICE建立了一套完整的过程评估模型(Process Assessment Model),通过这套评估模型最终就能得出过程能力的最终得分。项目组根据这个得分不断改进和优化得分不足的方面,从而约束整个流程的各个方面来间接提升项目的最终质量。这里有三个关键术语:其中最主要的就是PAM,即过程评估模型,由ASPICE给出,该模型可以看成

雪云飞星的博客 1184

YOLO由浅入深,最简单地说明白YOLO基本实现原理

YOLO(You Only Look Once)是一种高效的实时目标检测技术,广泛应用于自动驾驶、监控和无人机等领域。其核心优势在于速度快,能够在视频流中实时识别目标并标出其位置、大小、类别及置信度。YOLO基于卷积神经网络(CNN),通过卷积层提取图像特征,池化层和扁平化层优化特征处理,全连接层进行分类。与传统方法不同,YOLO将图像分割成多个网格,每个网格预测多个边界框及其置信度,仅对高置信度的框进行详细计算,从而快速确定目标的位置和类别。这种机制使得YOLO在保持高准确率的同时,实现了高效的实时处理能

qq_30279827的博客 567

Java基础与面向对象

Java基础和面向对象基础

qq_74078496的博客 1170

工艺边与定位孔设计经验规则总结

工艺边是在SMT焊接时,为了PCB和导轨接触预留的PCB边。工艺边和PCB的接触部分一般需要开槽,或者使用邮票孔,以方便后期去除工艺边。

fydar的博客 1987

Java 快速入门

java快速入门

qq_55202378的博客 4106

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【重生之Java零基础快速入门】

Java是一种面向对象的编程语言,由Sun Microsystems于1995年发布。希望这份详细的教程能帮助你快速入门Java编程!如果有任何问题,欢迎随时提问!

z17826856787的博客 1769

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java的接口与内部类、Object类

本文介绍了Java中的三个核心概念:1.接口(完全抽象的引用类型),通过支付案例演示了"一个接口,多种实现";2.内部类(四种类型及特性),通过数组迭代等案例展示了其组织代码和数据共享的优势;3.Object类(所有类的终极父类),重点讲解了其作为类型根的意义、toString()方法重写机制及多态支持。这些特性共同构成了Java面向对象编程的基础,体现了契约编程、代码复用和多态等核心思想。

bit866319519的博客 952

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

javaSE基础复习之面向对象(多态,内部类,内存回收)

这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。你的支持,我的动力;祝各位前程似锦,offer不断!!!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!五个区域介绍1、程序计数器较小。

H1767410的博客 600

JAVA复习 面向对象高级编程Day12 接口 内部类

接口,内部类(匿名内部类,局部内部类,成员内部类,成员内部类,静态内部类使用及其细节)

m0_46511996的博客 171

Java 面向对象高级

什么是多态?多态是在继承、实现情况下的一种现象,表现为:对象多态、行为多态。比如:Teacher和Student都是People的子类。

2303_82176667的博客 945

Java面向对象编程

访问修饰符 返回数据类型 方法名(形参列表..){//方法体语句;return 返回值;// 如果方法是void,则方法体中可以没有return 语句,或者只写return;访问修饰符(作用是控制方法使用的范围)如果不写默认访问,[有四种: public, protected, 默认, private]方法不能嵌套定义!java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。

2303_82176667的博客 1596

Java 面向对象核心技术:继承、多态、接口、内部类详解

关于Java面向对象核心技术,包括继承、多态、接口、内部类详解,但内容只展示到抽象类,后面接口和内部类可能没写出。摘要应概括核心内容。字数严格限制。输出纯文本。</think>本文系统讲解Java面向对象核心技术:继承实现代码复用,方法重写支持多态,多态需继承与重写并依赖父类引用指向子类对象;抽象类定义模板,含抽象方法需子类实现。概述核心规则、注意事项及类型转换,为构建知识体系提供脉络。

m0_45093055的博客 390

Java - 面向对象从基础到高级之高级

面向对象高级: Object类、 抽象类、 接口、 多态、 内部类。

qq_35221384的博客 239

Java入门基础-10面向对象高级

static:叫静态,可以修饰成员变量、成员方法。类变量:有static修饰,属于类,在计算机中只有一份,会被类的全部对象共享。(与类一起加载一次)实例变量(对象的变量):无static修饰,属于每个对象的(每个对象都会持有一份,只能用对象访问)。

m0_64126885的博客 1196

Java零基础快速入门

这篇Java基础复习笔记系统整理了Java核心知识点,主要包含以下内容: 核心特性:封装(属性私有+公共方法)、继承(IS-A关系)、多态(编译时重载/运行时重写)三大面向对象特性,以及编译运行机制。 基础语法:访问权限控制、开发环境组成、8种基本数据类型与缓冲池机制、字符串特性与相关类对比、变量分类及运算符使用。 关键字解析:final(不可变性)、static(类共享成员)、this/super(对象引用)、instanceof(类型判断)等关键字的用法和限制。 面向对象核心:类与对象关系、继承与重写规

weixin_47759174的博客 694

面试轻松讲清楚 Java 面向对象的问题与知识(类与对象,封装,继承,多态,接口,内部类...)

写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解。所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项目,专注 Java 后端面试题 + 解析 + 重点知识详解 + 精选文章的开源项目,希望它能伴随你我一直进步! 说明:此项目我确实有很用心在做,内容全部是我参考了诸多博主(已注明出处),资料,N本书籍,以及结合自己理解,重新绘图,重新组织语言等等所制。个人之力绵薄,或有不足之处,在所难免,但更新/完善会一直进行

理想二旬不止 - 专注JAVA技术 525

java基础-面向对象

这章分享面向对象高级技巧:包含枚举、封装、继承、多态、抽象类、内部类、函数式编程、常用API等内容

qq_44930306的博客 1011
上一篇: Java基础快速入门: 面向对象高级之继承、抽象类、代码块与final关键字
下一篇: Java基础快速入门: 面向对象高级之Lambda表达式深度解析
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值