`

java中的继承详解 extends会产生那些事

 
阅读更多
   继承:
 判断继承的标准 “IS-a”
 在子类中可以增加域、增加方法,然而绝对不能够删除继承的任何域和方法;
 如果子类的构造器没有显式的调用超类的构造器,则将自动地调用超类默认(没有参数的)构造器,如果超类没有不带参数的构造器,并且在子类的构造器中又没显式声明地调用超类的其他构造器,则Java编译器将报告错误。从这句话中可以得出,子类无论如何都会调用超类的构造器。
也就是说:
    子类一定会调用父类的构造:
     当在子类中不写Super(有参)时,会自动调用Super(无参)。
     当写了Super(参数),则找父类参数匹配的构造。
     如果父类没有不带参数的构造,子类的构造中又没有显式的声明调用父类的其他构造,则不能通过编译
class TestSuper{    
  TestSuper(int i){} 
} 
class TestSub extends TestSuper{ 
 
} 
public class TestAll{    
  public static void main(String args[]){    
  new TestSub();      
  } 
} 

不能编译成功

解决方法1:在子类TestSub中添加下面的构造:
public TestSub() {
  super(0);
  }
解决方法2:在TestSuper类添加无参数构造函数TestSuper(){}
或:在TestSub添加无参数构造函数TestSub (){}

更简单的理解:如果不调用子类内的基础类构造器(TestSuper),编译器就会报告自己找不到TestSuper()形式的一个构造器,除此以外,在子类构造器中,对超类构造器的调用是必须做的第一件事情,
编译器会强迫我们在子类构造器的主体中首先设置对超类构造器的调用,这意味着,在它之前不能出现任何东西。所以我们看到:注意:使用super调用构造器的语句必须是子类构造器的第一条语句


在继承中有两上关键字:this和super
这两个关键字都有两种用法:
This: 引用隐式参数,这种情况下,谁调用,this就代表谁。
    调用该类其它的构造方法;
Super: 调用超类的方法;
    调用超类的构造器;
可以看到,Super与超类有关,是调用超类的方法或构造的。而this只与本类有关。

重写的条件是必须存在继承,并且只有方法具有重写。子类中的普通方法(也即非静态方法)重写只能重写父类的非静态方法。静态方法可以重写,但是要求父子类的方法都必须是静态的方法才行。
可以将其总结如下:
 必须存在继承且只有方法具有重写
 非静态方法只能重写父类的非静态方法
 静态方法可以重写,但要求父子类的方法都必须是静态方法。静态方法重写不支持多态,依然调用父类的方法。


★重写的语法要求:
方法名、参数列表、返回类型必须相同。
访问权限不能更小,也就是说子类重写的方法访问权限不能比父类的小。
不能抛出更大的异常,也就是说不能抛出比父类更大的异常。

继承后程序的运行顺序:
    先父后子;
    先This,后Super;
    先语句块,后构造器;
★什么能被继承:
  属性能被继承,但只有Public的属性能够被调用
  只有Public 的方法能被继承,私有方法不能被继承
  构造不能继承,但一定会被子类调用。

★继承与设计:
  为什么需要继承?继承的好处是什么?
  如果你的多个类中具有相同的属性,就可以把那些相同的属性提取出来做为父类,其他那些类继承父类,子类将会拥有父类的所有的非私有的属性和方法,这样即可以减少代码的冗余,又增强了代码的可读性和健壮性

   “继承”是面向对象软件技术当中的一个概念。如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类"。继承可以使得子类具有父类的各种属性和方 法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。

继承的基本概念
1.继承是面向对象的三大特性之一。(封装,继承,多态)
2.被继承的类是父类,继承父类的类是子类
3.继承可以使一个对象直接使用另以对象的属性和方法
4.继承可实现代码重用


继承的限制
1.java只能显示单继承,即一个类只能有一个父类
2.允许多重继承
3.继承只能继承非私有的属性和方法
4.构造方法不能被继承

来看例子

情况一:

Java代码  收藏代码
public class Mystring {  
      
    public static void main(String[] args) {  
          
          student ok=new student("xiaoming");  
              ok.say();//say方法也被继承过来  
    }  
  
}  
class person  
{  
    public String name;   
    //构造方法  
    public person()  
    {  
       System.out.println("我是person构造方法");  
    }  
    public void say()  
    {  
        System.out.println("名字是 :"+name);  
    }  
}  
class student extends person//继承person类  
{  
    public student(String name)  
    {  
          this.name=name;//person的name属性被继承过来  
    }     
}  

输出结果为:



得出结论1:子类实例化时,首先会调用父类的构造方法,之后自己在进行实例化操作

情况二:



    此时引入关键字super。super表示父类的引用,可以调用父类的方法和属性。如调用父类的say方法,可以用。super.say()调用。

得出结论二:父类无默认构造函数时,子类必须显示的调用父类的构造方法


继承方法的重写

   概念:在java中,子类能继承父类中的方法,但有时子类并不想原封不动的使用父类的方法,而想做一些修改,这就需要采用方法的重写,又称方法覆盖。

方法重写需要注意的特性
1.发生重写的父类和子类的两个方法的返回值,函数名,参数列表必须完全一致
2.子类抛出的异常不能超过父类相应方法抛出的异常
3.子类方法的访问级别不能低于父类相应方法的访问级别(如父类方法时protected,子类重写就要用protected或public)

如:
Java代码  收藏代码
public class Mystring {  
      
    public static void main(String[] args) {  
          
          student ok=new student("xiaoming");  
          ok.say();//say方法也被继承过来  
    }  
  
}  
class person  
{  
    public String name;   
     
    public void say()  
    {  
        System.out.println("名字是 :"+name);  
    }  
}  
class student extends person//继承person类  
{  
    public student(String name)  
    {  
        this.name=name;//person的name属性被继承过来  
    }     
      
    //say方法重写  
    public void say()  
    {  
        System.out.println("重写过得方法       名字是 :"+name);  
      
    }  
}  


输出结果:


分享到:
评论

相关推荐

    java类的继承详解说明

    Java 类的继承详解说明 Java语言中,继承是面向对象编程的三大特征之一,是一种实现代码复用的机制。它允许一个类继承另一个类的成员变量和方法,从而实现代码的重用和扩展。 继承的定义 继承是指一个类继承另一...

    Java的继承机制详解

    Java的继承机制是面向对象编程中的核心特性,它允许一个类(子类)从另一个类(父类)继承属性和方法,从而实现代码的复用和扩展。在Java中,继承具有以下特点: 1. 单继承:不同于C++等语言,Java仅支持单继承,即...

    详解java接口、继承和多态

    ### 详解Java接口、继承和多态 #### 一、Java接口 在Java中,接口是一种定义行为的方式,它提供了一种实现抽象方法的手段。通过接口,开发人员可以为类定义一组方法签名,但不提供这些方法的具体实现。这有助于...

    java扫雷代码详解

    Java扫雷程序的设计主要分为三个步骤:第一步,extends JFrame,继承JFrame类,创建一个新的扫雷程序窗口;第二步,定义需要的组件,包括按钮、标签、面板、菜单栏等;第三步,在构造函数中构造组件,并添加到扫雷...

    Java继承extends与super关键字详解

    Java继承extends与super关键字详解 Java继承机制是面向对象编程(Object-Oriented Programming)的一个基本概念,它允许子类继承父类的特征和行为,使得子类具有父类相同的行为。Java中使用extends关键字来表示...

    Java基础教程之继承详解

    Java中的继承是面向对象编程的一个核心特性,它允许一个类(子类或衍生类)从另一个类(父类或基类)中继承属性和行为,从而实现代码的重用和扩展。这种机制使得子类可以复用基类的公共功能,同时保留自己的独特功能...

    Java多线程详解

    以上是对"Java多线程详解"主题的详细阐述,涵盖了Java多线程的基本概念、实现方式、线程控制、线程池、并发集合、线程间通信以及并发编程中常见的问题和解决方案。学习和熟练掌握这些内容对于开发高效的多线程Java...

    详解JAVA中implement和extends的区别

    JAVA中implement和extends是两个非常重要的关键字,它们都是用来实现继承和接口的,但是它们之间有着很大的区别。extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承。Java中不支持...

    java 异常详解,java异常分类,创建自己的异常

    Java 异常详解 Java 异常是指在程序运行中出现的违背指定正常流向的事件。异常可以分为两大类:-checked 异常和 unchecked 异常。Checked 异常必须在编译时捕捉并处理,而 unchecked 异常可以在编译时忽略,但是在...

    Java继承(超详解)

    Java继承是面向对象编程的一个核心特性,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。这种机制使得代码的复用性和扩展性大大增强,降低了软件开发的复杂度。本文将深入探讨Java中...

    java继承例题

    Java继承机制详解 Java继承是面向对象编程(OOP)的一种机制,允许一个类继承另一个类的成员变量和成员方法。通过继承,可以实现代码的重用和扩展。 在Java中,继承是通过使用关键字`extends`来实现的。例如,`...

    java继承详解

    ### Java继承详解 #### Final关键字 在Java编程语言中,`final`关键字具有重要的作用,主要体现在以下几个方面: 1. **被final修饰的成员变量**: - 被`final`修饰的成员变量一旦赋值后就不可再被修改,这种变量...

    java继承与多态

    ### Java继承与多态知识点详解 #### 一、引言 在面向对象编程语言中,继承和多态是非常重要的概念。它们提供了强大的机制来管理代码的复杂性,并且能够有效地复用现有代码。本文将详细介绍Java中的继承和多态概念...

    java教程之java继承示例详解

    "java继承示例详解" java继承是指新定义的类从已有的类中获取属性和方法的现象。这个已有的类叫做父类,而从这个父类获取属性和方法的类叫做子类。继承的主要优点是提高了代码的重用性,让类和类之间产生了关系,为...

    Java继承详解

     通过extends关键字让类与类之间产生继承关系。  class SubDemo extends Demo{} //SubDemo是子类,Demo是父类  继承有什么好处?  提高代码的复用性。  让类与类之间产生了关系,是多态的前提。  继承...

    Java软件开发实战 Java基础与案例开发详解 6-1 继承 共12页.pdf

    **Java继承思想的实现:** 如果不采用继承,可能会出现代码冗余的问题。例如,如果分别定义`Employee`类和`Manager`类,两者之间存在大量重复代码,因为经理也是一种员工。通过继承,可以避免这种重复。 **继承的...

    java中extends与implements的区别.docx

    ### Java中extends与implements的区别详解 #### 一、引言 在Java编程语言中,`extends`和`implements`是两个非常重要的关键字,它们分别用于实现类的继承和接口的实现。正确理解和使用这两个关键字对于编写高效、...

    java的继承原理与实现方法详解

    _java的继承原理与实现方法详解_ java的继承是面向对象编程(Object-Oriented Programming,OOP)的一种机制,允许子类继承父类的成员变量和方法,从而实现代码复用和提高程序的可维护性。下面将详细介绍java的继承...

    Java基础之extends用法详解及简单实例

    Java中的`extends`关键字是面向对象编程中的一个重要概念,它用于表示类之间的继承关系。继承是面向对象设计的核心特征之一,允许子类继承父类的属性和方法,从而实现代码的复用和扩展。 首先,我们需要理解Java中...

    Javaextends与implements的区别.docx

    ### Java中的extends与implements的区别详解 #### 一、引言 在Java编程语言中,`extends`和`implements`是两个非常重要的关键字,它们分别用于实现类的继承和接口的实现。正确理解和运用这两个关键字对于编写高效...

Global site tag (gtag.js) - Google Analytics