在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. linux --> Makefile编写

    Makefile编写 单目录 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: CC = gcc CFLAGS = -g -Wall mai ...

  2. JVM学习七:JVM之类加载器之类的卸载

    类加载的过程和原理,以及双亲委派机制都已经讲解完成,那么我们今天讲解类加载的最后一节,那么就是类的卸载. 我们知道,当一个类被加载.连接和初始化之后,他的生命周期就开始了,当该类的class对象不再被 ...

  3. Spring Cloud Consul 实现服务注册和发现

    Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具,它为基于 JVM 的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布 ...

  4. 【Java实现】栈和队列就是这么简单

    一.前言 上一篇已经讲过了链表[Java实现单向链表]了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够 ...

  5. Linux下的/etc/hosts文件

    在Unix系统下面有一个/etc/hosts文件,在我的Mac上,这个文件的内容如下: ## # Host Database # # localhost is used to configure th ...

  6. IO流回顾与总结第一篇之字节流与字符流的操作。。。。。

    一.引言 趁着年后的这点时间,抓紧点时间回顾下javase中的IO流,以往都是用到那些常用的IO类,这次来个全点的,有不对的地方还请大神指正一下,做到坚持写博的习惯来...... 回归正题,IO流顾名 ...

  7. Bate版敏捷冲刺每日报告--day1

    1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285)  Git链接:https://github.com/WHUSE2017/C-team 2 ...

  8. Linux下ftp和ssh详解

    学习了几天Linux下ftp和ssh的搭建和使用,故记录一下.学习ftp和ssh的主要目的是为了连接远程主机,并且进行文件传输.废话不多说,直接开讲! ftp服务器 1. 环境搭建 本人的系统是Arc ...

  9. 使用XIB的UITableViewCell自适应,以及出现的问题进行解决

    1.首先需要定义一个属性 @property (nonatomic, strong) UITableViewCell *prototypeCell; 2.在创建完tableView后加上如下代码 se ...

  10. [JCIP笔记] (二)当我们谈线程安全时,我们在谈论什么

    总听组里几个大神说起线程安全问题.本来对"线程安全"这个定义拿捏得就不是很准,更令人困惑的是,大神们用这个词指代的对象不仅抽象而且千变万化.比如,我们的架构师昨天说: " ...