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
功能 调用本类构造、本类方法、本类属性 子类调用父类构造、方法、属性
形式

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

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

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

 

 

 

 

目录
相关文章
|
2天前
|
存储 Java 开发者
什么是java的Compact Strings特性,什么情况下使用
Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。
|
11天前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
31 5
|
18天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
39 8
|
18天前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
55 1
|
18天前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
35 1
|
1月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
51 17
|
1月前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
31 4
|
27天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
89 4
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
50 2