类和对象二

简介: 类和对象二

Java类和对象实例(五):多态

多态是面向对象编程的四大特性之一,它允许我们使用父类类型的引用指向子类对象,并可以在运行时确定调用哪个子类的方法。这通常通过方法重写(Override)和方法重载(Overload)来实现。

方法重写(Override)

当子类有一个与父类完全相同的方法(方法名、参数列表和返回类型都相同)时,我们说子类重写了父类的方法。在运行时,如果通过父类引用调用这个方法,将执行子类中的实现。

java复制代码

 

// 父类

 

public class Animal {

 

void makeSound() {

 

System.out.println("The animal makes a sound.");

 

}

 

}

 

 

 

// 子类

 

public class Dog extends Animal {

 

// 重写父类方法

 

@Override 

 

void makeSound() {

 

System.out.println("The dog barks.");

 

}

 

}

 

 

 

// 另一个子类

 

public class Cat extends Animal {

 

// 重写父类方法

 

@Override 

 

void makeSound() {

 

System.out.println("The cat meows.");

 

}

 

}

使用多态

java复制代码

 

public class Main {

 

public static void main(String[] args) {

 

Animal animal1 = new Dog(); // Dog对象赋值给Animal引用

 

Animal animal2 = new Cat(); // Cat对象赋值给Animal引用

 

 

 

// 调用makeSound方法,实际执行的是子类中的实现

 

animal1.makeSound(); // 输出 "The dog barks."

 

animal2.makeSound(); // 输出 "The cat meows."

 

}

 

}

方法重载(Overload)

方法重载是指在同一个类中可以有多个方法拥有相同的名字,但参数列表(参数数量、类型或顺序)必须不同。

java复制代码

 

public class Calculator {

 

// 重载的加法方法,接受两个整数参数

 

int add(int a, int b) {

 

return a + b;

 

}

 

 

 

// 重载的加法方法,接受两个浮点数参数

 

double add(double a, double b) {

 

return a + b;

 

}

 

}

使用重载

java复制代码

 

public class Main {

 

public static void main(String[] args) {

 

Calculator calculator = new Calculator();

 

 

 

// 调用不同的add方法,根据参数类型决定

 

int sumInts = calculator.add(5, 10); // 使用整数参数的add方法

 

double sumDoubles = calculator.add(5.5, 10.5); // 使用浮点数参数的add方法

 

 

 

System.out.println("Sum of integers: " + sumInts);

 

System.out.println("Sum of doubles: " + sumDoubles);

 

}

 

}

Java类和对象实例(六):封装、抽象和接口

封装(Encapsulation)

封装是指将对象的属性(变量)和方法(函数)隐藏在一个类内部,并通过公共的getter和setter方法来访问和修改这些属性。这有助于保护对象的内部状态,防止外部代码直接访问和修改对象的属性。

抽象(Abstraction)

抽象是指只显示对象的必要信息,而隐藏不必要的细节。在Java中,可以使用抽象类(abstract class)和抽象方法(abstract method)来实现抽象。抽象类不能被实例化,通常包含一个或多个抽象方法,这些方法在抽象类中没有具体实现,必须由子类提供具体实现。

接口(Interface)

接口是一种定义方法但不包含实现的抽象类型。它允许我们定义一组方法,然后由不同的类来实现这些方法。接口可以被类实现(implements),一个类可以实现多个接口。接口是Java中实现多态的一种方式。

定义抽象类和接口

java复制代码

 

// 抽象类

 

public abstract class Animal {

 

abstract void makeSound(); // 抽象方法

 

}

 

 

 

// 接口

 

public interface Speakable {

 

void speak(); // 接口方法

 

}

 

 

 

// 实现抽象类和接口的类

 

public class Dog extends Animal implements Speakable {

 

@Override 

 

void makeSound() {

 

System.out.println("The dog barks.");

 

}

 

 

 

@Override 

 

public void speak() {

 

System.out.println("The dog says, 'Woof!'");

 

}

 

}

使用抽象类和接口

java复制代码

 

public class Main {

 

public static void main(String[] args) {

 

Animal animal = new Dog(); // Dog对象赋值给Animal引用

 

Speakable speakable = new

 

目录
相关文章
|
Java Linux 开发工具
Linux安装JDK1.8
Linux安装JDK1.8
607 0
|
弹性计算 JSON 监控
EventBridge:构建SaaS应用集成的桥梁,让数据流动成为一场精彩的交响乐!
【8月更文挑战第8天】在云计算时代,SaaS应用因灵活性和可扩展性备受青睐,但多应用环境下的数据共享成为挑战。Amazon EventBridge作为一款无服务器事件总线服务,支持应用程序、SaaS应用及AWS服务间的事件驱动交互。它简化了事件产生、路由与处理流程,支持自定义与内置事件,实现应用间松耦合集成,提升系统可维护性和扩展性。通过定义业务相关事件、创建事件模式及规则,可轻松配置目标动作(如Lambda函数),实现如新订单触发CRM更新等场景。EventBridge提供高效灵活的集成方式,有助于提高应用响应性和可扩展性,成为云架构师不可或缺的技能之一。
312 7
|
存储 大数据 数据处理
大数据环境下的性能优化策略
大数据环境下的性能优化策略
538 2
|
缓存 安全 前端开发
Cloudflare
【7月更文挑战第13天】Cloudflare
872 5
|
数据采集 开发者 Python
StaleElementReferenceException 不再是问题:Google Colab 上的 Selenium 技巧
在网页抓取中,Selenium面对动态页面时可能抛出`StaleElementReferenceException`。为解决这个问题,可以在Google Colab中使用显式等待、异常处理和代理IP。当元素变化时,通过WebDriverWait等待元素加载,捕获并重试`StaleElementReferenceException`异常。同时,利用亿牛云爬虫代理分散请求,防止频繁刷新导致异常。提供的Python代码示例展示了如何实现这一策略,从澎湃新闻网站抓取热点新闻。这种方法增强了爬虫的稳定性和效率。
304 0
StaleElementReferenceException 不再是问题:Google Colab 上的 Selenium 技巧
|
XML 设计模式 安全
【Spring框架四】——Spring AOP 注解实现和xml方式实现1
【Spring框架四】——Spring AOP 注解实现和xml方式实现
284 0
|
监控 数据可视化 BI
基于Dataphin+Flink构建期货交易监察实时应用
新一代证券交易监察系统利用大数据和实时计算技术强化风险控制、交易数据处理、识别异常交易等能力。通过Dataphin与Flink结合,构建期货交易监察实时数据应用;借助QuickBI用于打造实时看板和预警体系,实现期货交易监察的实时可视化分析和自动化预警。
858 0
|
监控 Dubbo 数据可视化
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(4)
带你读《Apache Dubbo微服务开发从入门到精通》——三、 全链路追踪(4)
664 79
|
Ubuntu
ubuntu下使用ndk编译libevnet
ubuntu下使用ndk编译libevnet
262 1

热门文章

最新文章