在java继承中,子类也称为派生类,父类也称为基类或者超类,基本语法 :子类 extends 父类{}

实现一个简单的继承类:

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 ;
}
}
class Student extends Person{
private String school ;
public void setSchool(String school){
this.school = school ;
}
public String getSchool(){
return school ;
}
}
public class Test{
public static void main(String args[]){
Student stu = new Student();
stu.setName("小学生");//父类方法
stu.setAge(18);//父类方法
stu.setSchool("蓝翔挖掘机专修学院"); //自身方法
System.out.println(stu.getName()+"、" + stu.getAge() + "、" + stu.getSchool());
}
}

在对子类进行实例化的时候,先是执行父类构造方法,然后执行子类

class Person{
public Person(){
System.out.println("父类无参构造");
}
}
class Student extends Person{
public Student(){
super();//此处不写super();也会默认调用
System.out.println("子类无参构造");
}
}
public class Test{
public static void main(String args[]){
new Student();//此时默认调用父类无参构造
}
}
/*执行结果:
父类无参构造
子类无参构造
*/
class Person{
private String name;
public Person(String name){
System.out.println("父类无参构造" + name);
}
}
class Student extends Person{
public Student(){
super("java");//调用父类的有参构造,一定要放在第一个语句,和this()相似
System.out.println("子类无参构造");
}
}
public class Test{
public static void main(String args[]){
new Student();//此时默认调用父类无参构造
}
}
/*执行结果:
父类无参构造
子类无参构造
*/

子类覆写父类的方法中的注意点

  实例化的是哪一个类,在实例化对象在调用的时候就会默认调用该类的方法,如果子类不存在该方法,则会调用父类中的该方法,

  子类在覆写父类中的方法时候,方法的访问权限不能比父类要高,如果父类使用了private定义了一个方法,那么子类无法覆写,因为private定义的方法对外不可见只可以在本类中使用,即使子类写了一个相同的方法,也不可以称为覆写

class A{
public void print(){
System.out.println("A类中的方法");
}
public void fun(){
System.out.println("B类没有覆写该方法,默认调用父类");
}
}
class B extends A{
public void print(){
System.out.println("B类中的方法");
}
}
public class Test{
public static void main(String args[]){
B b = new B();
b.print(); //B类中的方法
b.fun(); //B类没有覆写该方法,默认调用父类
}
}

this.方法():首先会查找子类是否存在该方法,如果存在则直接调用,如果不存在则查找父类中是否有该方法,如果有则直接调用,如果没有则出现编译错误;

super.方法():直接调用父类中的该方法,如果不存在则出现编译时的错误;

重载和覆写之间的区别:

  重载(Overloading):在一个类中进行;方法名相同,参数个数以及类型不同;方法定义的没有权限限制;

  覆写(overrid):发生在继承关系中;方法名称相同,参数个数以及类型相同,返回值相同;子类不能比父类更加严格;

一个不需要注意的继承案例

class Array{
private int data[];
private int foot;
public Array(int len){
if(len != 0){
this.data = new int[len];
}else{
this.data = new int[1];
}
}
public void add(int num){
if(this.foot>=this.data.length){
return;
}else{
this.data[foot++] =num;
}
}
public int[] getData(){
return this.data;
}
}
//定义一个排序类
class SortArray extends Array{
public SortArray(int len){
super(len);//明确调用父类的有参构造,作用是为数组初始化
}
//覆写父类方法
public int[] getData(){
java.util.Arrays.sort(super.getData());//
return super.getData();
}
}
//反转数组
class ReverseArray extends Array{
public ReverseArray(int len){
super(len);
}
public int[] getData(){
int num = super.getData().length/2;//反转次数
int head = 0;
int tail = super.getData().length - 1;
for(int x = 0;x < num;x++){
int temp = super.getData()[head];
super.getData()[head] = super.getData()[tail];
super.getData()[tail] = temp;
head ++;
tail --; }
return super.getData();
}
}
public class Test{
public static void main(String args[]){
ReverseArray arr = new ReverseArray(3);
arr.add(1);
arr.add(10);
arr.add(3);
arr.add(4);
//arr.add(5);
int data[] = arr.getData();
for(int x=0;x<data.length;x++){
System.out.print(data[x]+"\t");
}
}
}

java的继承性的更多相关文章

  1. Java之继承性

    为什么要有继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可.其中,多个类可以称为子类,单独那一个类称为父类.超类或者基类. 继 ...

  2. java 面向对象(十二):面向对象的特征二:继承性 (一) 前言

    1.为什么要有类的继承性?(继承性的好处) * ① 减少了代码的冗余,提高了代码的复用性 * ② 便于功能的扩展 * ③ 为之后多态性的使用,提供了前提图示: 2.继承性的格式:class A ext ...

  3. Java学习---基础知识学习

    2016-07-23  周六 利用键盘输入的时候需要抛出异常 ,直接快捷键 ctrl + 1 ;定义数组 int score[] = new int[4]  ;  只有4个数字BufferedRead ...

  4. 浅谈Java三大特性之继承

    前言 简单用伪代码去介绍一些 父类与子类的构造函数问题 others 前言 类的继承性是面向对象语言的基本特性,多态性前提是继承性.Java 支持继承性和多态性.——Java从小白到大牛 继承:三大特 ...

  5. JAVASE(九)面向对象特性之 : 继承性、方法重写、关键字super、

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.继承性 1.1 为什么要类的继承性?(继承性的好处) ①减少了代码的冗余,提高了代码的复用性:②更好 ...

  6. java 面向对象(二十四):interface:接口

    interface:接口1.使用说明: 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能 ...

  7. Java基础语法,常用知识复习

    1.开发环境搭建 1.1JDK.JRE.JVM.的关系 JDK = JRE + 开发工具集(例如javac编译工具集等) JRE = JVM + Java SE 标准类库 2.基本语法 2.1.jav ...

  8. 尚硅谷Java——宋红康笔记【day11-day18】

    day11 Eclipse中的快捷键: * 1.补全代码的声明:alt + / * 2.快速修复: ctrl + 1 * 3.批量导包:ctrl + shift + o * 4.使用单行注释:ctrl ...

  9. <Android Framework 之路>多线程

    多线程编程 JAVA多线程方式 1. 继承Thread线程,实现run方法 2. 实现Runnable接口 JAVA单继承性,当我们想将一个已经继承了其他类的子类放到Thread中时,单继承的局限就体 ...

随机推荐

  1. oracle 11g数据库 DMP还原数据库

    -------------------------- jd :表空间 -------------------------- --本地登陆 cmd下直接执行 sqlplus/as sysdba; --修 ...

  2. ElasticSearch之 控制相关度原理讲解

    控制相关度 相关度评分背后的理论 如何计算评分的 Lucene 使用布尔模型(Boolean model) 查找匹配文档 并主要的借鉴了 词频/逆向文档频率(term frequency/invers ...

  3. setContentView()与LayoutInflater.inflate()作用

    @Override protected void onCreate(Bundle savedInstanceState) {  try{   super.onCreate(savedInstanceS ...

  4. 使用MVC5+Entity Framework6的Code First模式创建数据库并实现增删改查功能

    此处采用VS2017+SqlServer数据库 一.创建项目并引用dll: 1.创建一个MVC项目 2.采用Nuget安装EF6.1.3 二.创建Model 在models文件夹中,建立相应的mode ...

  5. Beta项目复审

    Beta项目复审 复审人:张宇光 所属团队:MyGod 团队成员:程环宇.王田路.张芷祎.张宇光.王婷婷 团队排名: SW_HW4-team团队 hyw-team团队 Java-Team团队 C++团 ...

  6. 团队作业7——第二次项目冲刺(Beta版本计划及安排)

     Beta版本冲刺       需要改进完善的功能 1.寻找BUG.并解决问题 2.界面的优化 下一阶段新增的功能' 1.个人信息头像上传 2.头像裁剪功能 需要改进的团队分工 1.之前产品的主要工作 ...

  7. Java的HelloWorld程序

    Java的HelloWorld程序 1.新建文本文档,编写HelloWorld程序,最后保存时记得保存成.java格式 2.在D盘新建一个HelloJava文件夹用于保存java程序 3.使用WIN+ ...

  8. sqlserver之排序规则和ETL不支持sqlserverdatetime2的问题

    sqlserver的排序规则大概分为Windows 排序规则和 SQL Server 排序规则.数据在安装的时候,默认不设置会默认为SQL_Latin1_General_CP1_CI_AI.数据库在创 ...

  9. HAOI 2012 高速公路

    https://www.luogu.org/problem/show?pid=2221 题目描述 Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这 ...

  10. 前端之bootstrap模态框

    简介:模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. Modal简介 Modal实现弹出表单 M ...