java的继承性

在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");
        }
    }
}
时间: 2024-10-20 02:43:30

java的继承性的相关文章

23. java面向对象 - 继承性

一.继承定义 1.继承性的好处 ① 减少代码冗余,提高代码复用性 ② 便于功能的扩展 ③ 为多态性使用,提供了前提 2.继承性格式:class A extends B{} ① A:子类.派生类.subclass ② B:父类.超类.基类.superclass ③ 子类继承父类中构造器.属性.方法:私有只能使用geter/setter方法去使用,实现了继承性后,不可打破封装性. 3. java中关于继承性的规定 ① java中只支持单继承或多层继承,不允许多继承 ② 一个子类只能有一个父类 ③ 一

Java之继承性

为什么要有继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可.其中,多个类可以称为子类,单独那一个类称为父类.超类或者基类. 继承的概念 继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性.相同的行为.子类可以直接访问父类中的非私有的属性和行为.继承描述的是事物之间的所属关系,这种关系是: is-a 的关系.继承的关系中,“子类就是一个父类”,也就是说子类可以被当做父类看待.例如,兔子属于食草动物,食草动物

Java笔记十四.深入理解类和对象(1)

Java是一种完全面向对象的编程语言(C是面向过程).所谓面向对象编程(OOP),即是一种编程风格,它通过给程序中加入扩展语句,把函数"封装"进编程所必需的"对象"中.OOP 达到了软件工程的三个主要目标:重用性.灵活性和扩展性.其实,面向对象就是把一切东西看成一个个对象,比如人,车,面包,等等,然后把这些对象拥有的属性变量,比如年龄,民族,工作地点,变质期,寿命,还有操作这些属性变量的函数(方法)打包成一个类来表示,这个类的一个抽象就是一个对象.在Java程序中,

《Java从小白到大牛》之第12章 继承与多态

<Java从小白到大牛>纸质版已经上架了!!! 类的继承性是面向对象语言的基本特性,多态性前提是继承性.Java支持继承性和多态性.这一章讨论Java继承性和多态性. Java中的继承 {#java} 为了了解继承性,先看这样一个场景:一位面向对象的程序员小赵,在编程过程中需要描述和处理个人信息,于是定义了类Person,如下所示: //Person.java文件 package com.a51work6; import java.util.Date; public class Person

浅谈Java三大特性之继承

前言 简单用伪代码去介绍一些 父类与子类的构造函数问题 others 前言 类的继承性是面向对象语言的基本特性,多态性前提是继承性.Java 支持继承性和多态性.——Java从小白到大牛 继承:三大特性之一,关键词:extends 简单用伪代码去介绍一些 假设需要定义个student类 public class Student{    private String name;//名字    private int age;//年龄    private int sex;//性别} 再来个需求,需

面向对象之接口与抽象性

一.接口(interface) 1.定义 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则必须能...”的思想.继承是一个"是不是"的关系,而接口实现则是 "能不能"的关系 接口的本质是契约,标准,规范,就像我们的法律一样.制定好后大家都要遵守 一个类可以实现多个接口,可以得到多重继承的效果 2.接口的使用说明(JDK7及以前) ① Java中,接口(interface) 是与类(class)并列的结构 ② 如何定义一个接口:使用interfa

Java面向对象设计主要有三大特征:封装性、继承性和多态性

一  封装性   1.1  概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访问. 1.2  目的:我们可以并且有可能在方法中,添加自己的限制,保证数据的有效性:从某种程度上说,封装也提高了代码的健壮性.安全性. 1.3  实现步骤:所有的成员变量全部私有化,格式 :private   数据类型  变量名  ,提供访问成员变量的getter/setter方法. 二  继承性   2.1  概念:子类通过一种方式来接受父类所有的公有的,

JAVA学习--面向对象的特征二:继承性

* 一.面向对象的特征二:继承性 * 1.为什么要设计继承性?  *  * 2.通过"class A extends B"类实现类的继承.  *   子类:A  父类(或基类 SuperClass):B  *     * 3.子类继承父类以后,父类中声明的属性.方法,子类就可以获取到.  *    明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接  *        调用罢了.  *   子类除了通过继承,获取父类的结构之外,还可以定义

Java中的继承性特性

继承性是java中的第二特性之一.而继承性最为关键的地方为:代码重用性的问题,利用继承性可以从已有的类中继续派生出新的子类,也可以利用子类扩展出更多的操作功能. 继承性的实现代码为:class 子类  extends  父类{ } 有以下3点说明: 1.对于extends而言,需要不断的开展开来,但是为了理解上的方便,这些统一称之为:继承: 2.子类又称之为派生类: 3.父类又称之为超类(Super class): 以下代码为子类继承父类的属性及方法 class Person{ private