Java继承的问题引导和测试代码

目录
  • 1.1、定义
  • 1.2、创建子类
  • 1.3、继承的基本规则
    • 1. 子类可以继承除父类构造函数以外的一切成员
    • 2. 虽然子类继承了父类的私有成员,但子类并不能直接访问,如果想要访问私有成员必须借助父类的公共接口。
    • 3. 只支持单一继承,不支持多重继承,但支持多层继承
  • 1.4、阻止继承
    • 1.4.1、final修饰符
      • 1. final 修饰的类不能被继承
      • 2. final 修饰的方法不能被覆盖
      • 3. final 修饰的变量(成员变量和局部变量)必须显式初始化,且只能初始化一次。
      • 4. 常量定义的标准格式
  • 总结

1.1、定义

从现有类派生的类被称作子类,也叫派生类,扩展类,或孩子类。现有类被称作超类,也叫基类,或父类。

1.2、创建子类

public class Person {}
public class Teacher extends Person{}

1.3、继承的基本规则

1. 子类可以继承除父类构造函数以外的一切成员

为什么子类没有继承父类的构造函数 ?
父类构造函数无法预知子类新增的属性和方法,所以不能被继承

2. 虽然子类继承了父类的私有成员,但子类并不能直接访问,如果想要访问私有成员必须借助父类的公共接口。

public class Person {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
	    this.name = name;
	}
}
public class Teacher extends Person{
// 方法覆盖
	public String getName() {
// super 调用父类的功能接口
    	return super.getName() + "校长";
	}
}
public class Test {
	public static void main(String... args) {
        Teacher flameking = new Teacher();
        System.out.println( flameking.getName() );
    }
}

测试结果:

小结:

super.getName() + "校长"; 这样便能访问父类私有的 name 属性 。所以在子类中可以通过 super.父类公共接口 的形式,访问父类的私有成员。

3. 只支持单一继承,不支持多重继承,但支持多层继承

解释:除了Object 没有父类,每个类有且仅有一个直接父类,如果没有明确指出父类,Object 被认为是这个类的父类。

也许有同学就会问了,既然 Object 是所有类的父类,那么为什么还可以继承其他类呢?
正如解释里所说:“没有明确指出父类,Object 被认为是这个类的父类。”

没有明确指出父类

public class Person {}
public class Teacher {}

继承关系是这样的:

继承后

public class Teacher extends Person{}

继承关系如下:

也许有同学又会问:既然不能多重继承了,那我要同时继承多个类的功能该怎么办呢?解决办法如下:

// 第一种方式(✖️)
public class Person {}
public class Employee {}
public class Teacher extends Person,Employee {}
// 第二种方式(✔️)
public class Person {}
public class Employee extends Person {}
public class Teacher extends Employee {}

小结:

如上,既然不能多重继承,那么利用多层继承的方式便能同时继承多个类的功能。

1.4、阻止继承

当我们在创建一个新类时,现有某个类包含我们想要的代码,那么让这个新类继承它,这样我们就不用重新编写代码,就可以复用已存在的属性和方法。可是有某个同学他偏偏不想让别人利用他的代码…

那他怎么做才能让自己的代码不被别人继承呢?

1.4.1、final修饰符

1. final 修饰的类不能被继承

使用方法:

public final class Person {}

效果显示:

2. final 修饰的方法不能被覆盖

3. final 修饰的变量(成员变量和局部变量)必须显式初始化,且只能初始化一次。

修改 final 局部变量 的取值

public class Test {
	public static void main(String... args) {
    final int temp;
    temp = 1;
    temp = 2;
    }
}

报错提示:

final成员变量未显式初始化

public class Person {
	private final String name;
}

报错提示:

4. 常量定义的标准格式

public static final 数据类型 常量名=赋值

常量名:大写字符,如果有多个,用下划线连接

private 修饰的类成员只能在类的内部访问,这是由面向对象的封装性决定的

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java面向对象之继承性的实例代码详解

    一.类的继承 A类继承B类,是指A类可以拥有B类的非私有属性和方法,同时A类也可以自己定义属性方法或重写方法以扩充自己的功能. 1.1 方法的重写 重写方法时,方法的方法名.返回值类型和参数个数及类型均需一致. 首先定义父类Animal,包含年龄.名字两个属性及吃的方法. public class Animal { int age; String name; public void eat(){ System.out.println("动物可以吃东西"); } } 通过子类Dog继承父

  • java子类继承父类实例-披萨的选择实现代码

    编写程序实现比萨制作.需求说明编写程序,接收用户输入的信息,选择需要制作的比萨.可供选择的比萨有:培根比萨和海鲜比萨. 实现思路及关键代码 1)分析培根比萨和海鲜比萨 2)定义比萨类 3)属性:名称.价格.大小 4)方法:展示 5)定义培根比萨和海鲜比萨继承自比萨类 6)定义比萨工厂类,根据输入信息产生具体的比萨对象 Pizza.java package zuoye; import java.util.Scanner; //父类 public class Pizza { String name;

  • java中继承测试代码分析

    继承:可以基于已经存在的类构造一个新类.继承已经存在的类就可以复用这些类的方法和域.在此基础上,可以添加新的方法和域,从而扩充了类的功能. public class ExtendsStu { /*动物类:动物都可以动 * 1.Dog 2.Cat * 在java中,子类可以继承父类的属性和功能; * 继承关系的指定: 子类 extends 父类 * 不能被继承的资源: * 1.子类不能继承父类的构造方法,而且必须调用一个父类的构造器(因为生成子类对象的时候会初始化父类属性) * 2.私有的资源不能

  • java 继承访问成员变量代码实例

    这篇文章主要介绍了java 继承访问成员变量代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 package java09; //创建父类 public class Fu { int numFu = 10; int num =100; public void methodFu(){ System.out.println(num); } } package java09; //创建子类 public class Zi extends Fu

  • Java抽象类、继承及多态和适配器的实现代码

    Java继承 方法重写是Java语言多态的特性,必须满足以下条件 在子类中,方法名称与父类方法名称完全相同 方法的参数个数和类型完全相同,返回类型完全相同 方法的访问修饰符访问级别不低于父类同名方法的访问级别 在方法上添加@override注释,如果报错说明不是重写 方法重写限制 final修饰的父类方法在子类中不能被重写 static修饰的父类方法在子类中不能被重写,只能覆盖 super关键字 super关键字和this类似,super修饰的是父类的对象,如super();调用的是父类的默认无

  • Java继承的问题引导和测试代码

    目录 1.1.定义 1.2.创建子类 1.3.继承的基本规则 1. 子类可以继承除父类构造函数以外的一切成员 2. 虽然子类继承了父类的私有成员,但子类并不能直接访问,如果想要访问私有成员必须借助父类的公共接口. 3. 只支持单一继承,不支持多重继承,但支持多层继承 1.4.阻止继承 1.4.1.final修饰符 1. final 修饰的类不能被继承 2. final 修饰的方法不能被覆盖 3. final 修饰的变量(成员变量和局部变量)必须显式初始化,且只能初始化一次. 4. 常量定义的标准

  • Java Unsafe类实现原理及测试代码

    Unsafe类介绍 第一次看到这个类时被它的名字吓到了,居然还有一个类自名Unsafe?读完本文,大家也能发现Unsafe类确实有点不那么安全,它能实现一些不那么常见的功能. Unsafe类使Java拥有了像C语言的指针一样操作内存空间的能力,同时也带来了指针的问题.过度的使用Unsafe类会使得出错的几率变大,因此Java官方并不建议使用的,官方文档也几乎没有.Oracle正在计划从Java 9中去掉Unsafe类,如果真是如此影响就太大了. Unsafe类提供了以下这些功能: 一.内存管理.

  • C++/java 继承类的多态详解及实例代码

    C++/java 继承类的多态详解 学过C++和Java的人都知道,他们二者由于都可以进行面向对象编程,而面向对象编程的三大特性就是封装.继承.多态,所有今天我们就来简单了解一下C++和Java在多态这方面的不同. 首先我们各看一个案例. C++ //测试继承与多态 class Animal { public: char name[128]; char behavior[128]; void outPut() { cout << "Animal" << endl

  • Java继承构造器使用过程解析

    这篇文章主要介绍了Java继承构造器使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 初始化基类 前面提到,继承是子类对父类的拓展.<Thinking in Java>中提到下面一段话: 当创建一个导出类的对象时,该对象包含了一个基类的子对象.这个子对象与你用基类直接创建的对象是一样的.二者区别在于,后者来自于外部,而基类的子对象被包装在导出类的对象内部. 我们在创建子类对象时,调用了父类的构造器,甚至父类的父类构造器.我们知道,构

  • Java实现邮件发送的过程及代码详解

    Java实现邮件发送 一.邮件服务器与传输协议 要在网络上实现邮件功能,必须要有专门的邮件服务器.这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中. SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com. SMTP协议 通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器). POP3协议 通常把处理用户pop3请求(邮件接收请

  • 新手初学Java继承、封装与多态

    目录 面向对象的三大核心特性 封装 继承 单继承 继承的优缺点 super关键字 super调用父类构造方法 super访问父类成员 super和this的区别 多态 instanceof关键字 方法重载 方法重写 抽象类 接口 定义接口 实现接口 总结 面向对象的三大核心特性 面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率.面向对象程序设计有以下优点. 可重用性:代码重复使用,减少代码量,提高开发效率.下面介绍的面向对象的三大核心特性(

  • Java实现自定义ArrayList类的示例代码

    目录 一.总体实现思路 二.add方法 三.size方法 四.isEmpty方法 五.构造方法 六.ArrayList整体代码 七.Test测试类 之前有接触过Collection中的ArrayList类,类中提供了多种可以操作的方法,但是为什么还需要自定义ArrayList类呢?主要是为了学习其中编写程序时的逻辑思维.,今天将简单的介绍ArrayList里面的add方法.size方法.isEmpty方法. 一.总体实现思路 在自定义ArrayList类时需要提前思考多个方面的内容 1.该Arr

  • Java中的静态内部类详解及代码示例

    1. 什么是静态内部类 在Java中有静态代码块.静态变量.静态方法,当然也有静态类,但Java中的静态类只能是Java的内部类,也称为静态嵌套类.静态内部类的定义如下: public class OuterClass { static class StaticInnerClass { ... } } 在介绍静态内部类之前,首先要弄清楚静态内部类与Java其它内部类的区别. 2. 内部类 什么是内部类?将一个类的定义放在另一个类的内部,就是内部类.Java的内部类主要分为成员内部类.局部内部类.

随机推荐