详细理解JAVA面向对象的封装,继承,多态,抽象

JAVA面向对象的基本概念

Java中,“一切皆对象”,Java程序就是通过面向对象的编程思想来实现的。面向对象的编程思想的核心概念主要包括封装、继承、多态和抽象。这些概念描述了Java对象与类之间的关系和相互作用。

封装

封装是指将数据和行为包装在一起,形成一个类。封装的主要目的是隐藏类的实现细节,只对外部暴露必要的接口,从而达到数据的安全性。

在Java中,我们通过访问控制修饰符(private、public、protected)来实现封装。将方法或变量定义为private时,就只能在本类中访问,而其他类则无法直接访问。继承后也不能访问,只能访问继承自基类的public和protected变量和方法。

示例1:一个简单的封装实例

public class Person {
    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("张三");
        person.setAge(18);
        System.out.println(person.getName() + "," + person.getAge());
    }
}

示例2:封装的一个好处就是细节的隐藏不会对其他模块造成影响

public class Timer {
    private final int interval;
    private long lastTick;

    public Timer(int interval) {
        this.interval = interval;
        this.lastTick = System.currentTimeMillis();
    }

    public boolean isTick() {
        long current = System.currentTimeMillis();
        if(current - lastTick>= interval) {
            lastTick = current;
            return true;
        }
        return false;
    }
}

public class Test {
    public static void main(String[] args) {
        Timer t = new Timer(1_000);
        for(int i=0; i<10; i++) {
            System.out.println(t.isTick());
            try { Thread.sleep(500);} catch (InterruptedException e) {}
        }
    }
}

继承

继承是指一个类可以集成另一个类的属性和方法。父类也称为基类或超类,子类称为派生类。继承的主要目的是提高代码的重用性,减少代码量。

在Java中,我们通过关键词extends来实现继承。子类可以重写父类中的方法,同时也可以访问父类中的public和protected函数和变量。

示例1:继承的基本实例

class Animal {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void move() {
        System.out.println(name + " can move");
    }
}

class Bird extends Animal {
    public void fly() {
        System.out.println(getName() + " can fly");
    }
}

public class Test {
    public static void main(String[] args) {
        Bird bird = new Bird();
        bird.setName("鹦鹉");
        bird.move();
        bird.fly();
    }
}

示例2:继承的一个好处就是可以避免代码的重复

class Animal {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void move() {
        System.out.println(name + " can move");
    }
}

class Dog extends Animal {
    public void bark() {
        System.out.println(getName() + " barks");
    }
}

class Cat extends Animal {
    public void meow() {
        System.out.println(getName() + " meows");
    }
}

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("旺财");
        dog.move();
        dog.bark();

        Cat cat = new Cat();
        cat.setName("小花");
        cat.move();
        cat.meow();
    }
}

多态

多态是指同一个方法可以根据对象的不同,表现出不同的行为。多态有两种体现方式:方法重载和方法覆盖。

方法重载是指同一个类中可以定义多个方法名相同,但参数类型、个数或顺序不同的方法,也称为编译时多态。

方法覆盖是指子类重写父类中定义的方法,使得同名方法可以根据对象类型的不同,表现出不同的行为,也称为运行时多态。

示例1:多态的基本实现

abstract class Animal {
    public abstract void sound();
}

class Cat extends Animal {
    public void sound() {
        System.out.println("喵喵");
    }
}

class Dog extends Animal {
    public void sound() {
        System.out.println("汪汪");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.sound();
        animal = new Dog();
        animal.sound();
    }
}

示例2:多态的一个好处就是可以将对象看作它所实现的接口或父类来使用

interface Runnable {
    public void run();
}

class Car implements Runnable {
    public void run() {
        System.out.println("Car is running");
    }
}

class Person implements Runnable {
    public void run() {
        System.out.println("Person is running");
    }
}

public class Test {
    public static void main(String[] args) {
        Runnable[] list = new Runnable[2];
        list[0] = new Car();
        list[1] = new Person();

        for(Runnable r : list) {
            r.run();
        }
    }
}

抽象

抽象是指将具体的实现细节抽象为通用的抽象类或接口。Java中可以使用abstract关键字来定义抽象类和抽象方法。

抽象类是指含有抽象方法的类。抽象方法是指只声明,而没有具体实现的方法。抽象类不能被实例化,只能被继承。继承的子类必须实现抽象类中的所有抽象方法,否则也必须被定义为抽象类。

接口是指具有方法签名,但没有实现的类。接口定义了一组规范,其实现类必须实现接口中的所有方法。接口中的方法默认为public,同时没有构造器和数据成员。

示例1:抽象类的基本实现

abstract class Shape {
    public abstract double area();
}

class Rectangle extends Shape {
    private double height;
    private double width;

    public Rectangle(double height, double width) {
        this.height = height;
        this.width = width;
    }

    public double area() {
        return height * width;
    }
}

public class Test {
    public static void main(String[] args) {
        Shape shape = new Rectangle(2, 3);
        System.out.println("The area of rectangle is " + shape.area());
    }
}

示例2:接口的基本实现

interface Runnable {
    public void run();
}

class Car implements Runnable {
    public void run() {
        System.out.println("Car is running");
    }
}

public class Test {
    public static void main(String[] args) {
        Runnable run = new Car();
        run.run();
    }
}

以上就是JAVA面向对象的封装、继承、多态和抽象的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详细理解JAVA面向对象的封装,继承,多态,抽象 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 深入浅出Java mvc_动力节点Java学院整理

    深入浅出Java MVC 介绍 Java MVC是一种设计模式,它将应用程序划分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。这种分层架构为应用程序提供了更好的可扩展性和灵活性。 MVC的基本原则 模型(Model) 模型是应用程序中的核心组件,它表示应用程序要处理的数据以及对数据进行操作的逻辑。在Java中,模型可以…

    Java 2023年6月15日
    00
  • 简单聊聊工作中常用的Java Lambda表达式

    让我详细讲解”简单聊聊工作中常用的Java Lambda表达式”的攻略。 Lambda 表达式是什么? Lambda 表达式是 Java 8 中引入的一项新特性,它可以在不需要具体实现某个接口中的所有方法的情况下,为该接口创建一个匿名实例。它可以看做是一种更简洁、更具表现力的极小函数,提供了 Java 中的函数式编程支持。 Lambda 表达式的语法 Lam…

    Java 2023年5月26日
    00
  • JDBCTM 指南:入门3 – DriverManager

    下面是详细讲解“JDBCTM 指南:入门3 – DriverManager”的完整攻略。 JDBCTM 指南:入门3 – DriverManager 在本文中,我们将介绍JDBC中的DriverManager类,它是Java SQL API的一个基本组件,用于管理数据库驱动程序。 什么是 DriverManager DriverManager是Java提供的…

    Java 2023年6月16日
    00
  • 搭建Tomcat 8源码开发环境的步骤详解

    搭建Tomcat 8源码开发环境的步骤详解 Tomcat是Apache旗下的一个轻量级web应用服务器,它支持Servlet和JSP等Java Web开发技术。如果我们需要在Tomcat源码基础上进行二次开发,那么需要搭建Tomcat源码开发环境,本文将详细讲解如何搭建Tomcat 8源码开发环境的步骤。 环境准备 JDK:需要安装JDK开发工具,Tomca…

    Java 2023年5月19日
    00
  • Java收集的雪花算法代码详解

    Java收集的雪花算法代码详解 什么是雪花算法? 雪花算法是一种能够帮助我们生成唯一ID的算法,由Twitter公司开发并在2010年开源。该算法的特点是高并发下不重复,适合在分布式系统中作为唯一ID的生成器。使用雪花算法可以有效减少分布式系统中因ID冲突造成的问题。 雪花算法的实现方式 雪花算法的实现方式如下: 首先,雪花算法规定了一个64位的二进制数, …

    Java 2023年5月19日
    00
  • Java SpringBoot快速集成SpringBootAdmin管控台监控服务详解

    Java SpringBoot快速集成SpringBootAdmin管控台监控服务 简介 Spring Boot Admin 是一个用于管理和监控 Spring Boot 应用程序的开源软件,通过 Spring Boot 的自动配置,只需要添加一个或者几个依赖就可以快速实现应用程序的管控台监控。 在本文中,我们将介绍如何快速集成 Spring Boot Ad…

    Java 2023年5月19日
    00
  • 构建Maven多模块项目的方法

    构建Maven多模块项目的方法可以分为以下步骤: 创建Maven父项目 在命令行下进入项目文件夹,执行以下命令: mvn archetype:generate -DgroupId=com.example -DartifactId=my-parent-project -DarchetypeArtifactId=maven-archetype-quickstar…

    Java 2023年5月19日
    00
  • Spring利用注解整合Mybatis的方法详解

    对于“Spring利用注解整合Mybatis的方法详解”的攻略,我会进行以下步骤进行讲解: 1. 添加Mybatis和Spring的依赖 在项目的pom.xml中添加以下依赖: <!– Mybatis依赖 –> <dependency> <groupId>org.mybatis</groupId> <…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部