JAVA中类的继承、覆写特性

简介: 继承继承性严格来讲就是指扩充一个类已有的功能。语法:class 子类 extends 父类{}功能:继承父类的属性、方法同时也可以扩充父类没有的属性、方法。

继承

继承性严格来讲就是指扩充一个类已有的功能。

语法:class 子类 extends 父类{}

功能:继承父类的属性、方法同时也可以扩充父类没有的属性、方法。

类的继承的限制:

一、Java中的类不允许多重继承,允许多层继承

        错误的继承:

class A{}
class B{}
class C extends A,B{}  //一个子类继承两个父类

     多层继承:

class A{}
class B extends A{}
class C extends B{}

二、子类在继承父类时,对父类的私有操作是隐式继承,非私有操作是显式继承

    如下程序所示,msg属性在A类中是私有声明,只能利用setter或getter方法进行私有属性访问。

class A{
	private String msg;
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public String getMsg() {
		return this.msg;
	}
}
class B extends A{
	
}
public class demo {
	public static void main(String args[]) {
		B b = new B();
		b.setMsg("Nice to see you!");
		System.out.println(b.getMsg());	
		
	}
	
}

三、父类对象先实例化,子类对象后实例化

    当父类提供无参构造方法时,可以不编写“super()”。但是如果父类不提供无参构造方法时,必须明确使用super()调用父类指定参数的构造方法。

class A{
	public A() {
		System.out.println("父类无参构造被调用");
	}
	public A(String title) {
	System.out.println("父类有参构造被调用 title="+title);
	}
}
class B extends A{
	public B(String title) {
//这一句可以不写也可以写,因为父类构造器中已有无参构造。
//但是若父类构造器没有无参构造则必须写super()
        super();
//		super(title);
		System.out.println("Nice to see you!");
	}
 
}
public class Temp {
public static void main(String args[]) {
	new B("hahahaha");
	
	}
 
}


输出结果:
父类无参构造被调用
Nice to see you!

package com.hdu.java;


class A{
	public A() {
		System.out.println("父类无参构造被调用");
	}
	public A(String title) {
	System.out.println("父类有参构造被调用 title="+title);
	}
}
class B extends A{
	public B(String title) {
//		super();
		super(title);
		System.out.println("Nice to see you!");
	}
 
}
public class Temp {
public static void main(String args[]) {
	new B("hahahaha");
	
	}
 
}

输出结果:
    父类有参构造被调用 title=hahahaha
    Nice to see you!

 

 

覆写

       定义:子类定义了和父类的方法名称、返回值类型、参数类型及个数完全相同的方法

       结果:实例化子类对象时,将不再执行父类的方法,而是直接调用已经被子类覆写过的方法。

       优势:当有多个字类时,父类的方法就会根据子类的覆写,有不同的实现效果。

权限问题:被子类覆写的方法不能有比父类更严格的访问控制权限。权限从宽到严的顺序是:public>default(默认,什么都不写)>private。

附:this 和 super的区别

区别 this super
功能 调用本类构造、本类方法、本类属性 子类调用父类构造、方法、属性
形式

先查找本类中是否存在有指定的调用结构,如果有则

直接调用,如果没有则调用父类定义

不查找子类,直接调用父类操作
特殊 表示本类的当前对象 ——

 

 

 

 

目录
相关文章
|
3天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
3天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
6天前
|
Java
Java的原子变量类
Java的原子变量类
17 8
|
3天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
11 3
|
4天前
|
Java API 开发者
Java 8新特性之Stream API详解
【10月更文挑战第22天】Java 8引入了重要的Stream API,用于处理集合数据。本文分三部分介绍:基本概念与原理、使用方法及应用实例。Stream API支持延迟执行、惰性求值,提供过滤、映射、排序、聚合等操作,使代码更简洁、易读。文中详细讲解了创建Stream、中间操作、终端操作以及具体应用场景,如排序、过滤、映射和聚合。
10 3
|
5天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
17 5
|
6天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
11 3
|
6天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
18 2
|
6天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
16 2
|
7天前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
22 3