java面向对象三大特性:封装、继承、多态——举例说明(转载)

createh518小时前技术教程1

概念

封装:封装就是将客观的事物抽象成类,类中存在属于这个类的属性和方法。
继承:继承就是把父对象继承过来,这样子类就存在了父类的操作方法,java是单继承,就是只能继承一个父对象。
多态:多态就是程序中允许出现重名现象,java实现多态的方式有方法重载和成员变量覆盖两种形式。

前期准备

首先定一个Fruit对象,里面封装了一个getName方法

class Fruit {
    static {
        System.out.println("我是Fruit类静态块");
    }

    public Fruit() {
        System.out.println("我是Fruit类构造方法");
    }

    public void getName() {
        System.out.println("我的名字是Fruit");
    }

}

再定一个Apple对象来继承Fruit对象

class Apple extends Fruit {
	static {
		System.out.println("我是Apple类静态块");
	}

	public Apple() {
		System.out.println("我是Apple类构造方法");
	}

	public void getName(){
		System.out.println("我的名字是Apple");
	}
}


其中Apple对象重写了父类的getName方法。

测试代码

1、使用子类构建对象的时候,父类和子类的静态块和他们的构造方法的执行顺序是什么?
测试的main如下所示,注意父类和子类里面有
静态块构造方法,看下面测试代码,可以先写出你认为的执行结果:

	public static void main(String[] agrs) {
		Apple apple = new Apple();
		apple.getName();
	}

测试结果如下:

我是Fruit类静态块
我是Apple类静态块
我是Fruit类构造方法
我是Apple类构造方法
我的名字是Apple

2、使用父类引用构建子类对象的时候,父类和子类的静态块和他们的构造方法的执行顺序是什么?
测试的main如下所示,注意父类和子类里面有
静态块构造方法,看下面测试代码,可以先写出你认为的执行结果

	public static void main(String[] agrs) {
		//使用父类引用指向子类对象
		Fruit fruit = new Apple();
		fruit.getName();
	}

测试结果如下:

我是Fruit类静态块
我是Apple类静态块
我是Fruit类构造方法
我是Apple类构造方法
我的名字是Apple

3、如果两块代码一起执行会发生什么呢?

    public static void main(String[] agrs) {
        Fruit fruit = new Apple();
        fruit.getName();
        System.out.println("---------分割线---------");
        Apple apple = new Apple();
        apple.getName();
    }

执行结果:

我是Fruit类静态块
我是Apple类静态块
我是Fruit类构造方法
我是Apple类构造方法
我的名字是Apple
---------分割线---------
我是Fruit类构造方法
我是Apple类构造方法
我的名字是Apple

总结

1、子类对象构建的时候静态块和构造方法执行顺序是:父类静态块 -> 子类静态块 ->父类构造方法 -> 子类构造方法
2、父类和子类的静态块是执行一次的
3、子类方法重写父类方法后,使用子类构建的对象执行的都是子类的方法。

原文章地址:
https://www.bmabk.com/index.php/post/72728.html

相关文章

java 中为什么重写 equals 后需要重写 hashCode

1. equals 和 hashCode 方法之间的关系  这两个方法都是 Object 的方法,意味着 若一个对象在没有重写 这两个方法时,都会默认采用 Object 类中的方法实现,它们的关系为:...

Java—类加载的基本机制和过程

类加载的基本机制和过程运行Java程序,就是执行java这个命令,指定包含main方法的完整类名,以及一个classpath,即类路径。类路径可以有多个,对于直接的class文件,路径是class文件...

SpringBoot自定义自动配置这些知识点你需要了解

前言Spring Boot 是一个快速开发框架,可以简化 Spring 应用程序的开发,其中自定义配置是其中一个非常重要的特性。在 Spring Boot 中,自定义配置允许开发者以自己的方式来配置应...

揭秘JVM双亲委派:Java世界里的“家族传承”如何守护代码安全?

揭秘JVM双亲委派模型:Java世界里的“家族传承”如何守护代码安全?一、什么是双亲委派模型?——Java世界的“家族责任制”在JVM中,双亲委派模型是类加载机制的核心规则。简单来说,它像一个“家族责...

京东大佬问我,java高级技术人员要掌握哪些技术呢?

京东大佬问我,java高级技术人员要掌握哪些技术呢?首先,我得考虑Java高级工程师需要哪些核心技能。基础部分可能包括JVM、多线程、集合框架这些,但高级的话可能需要更深入,比如JVM调优、并发编程的...