java基础知识--继承

继承

 

1、继承的概念

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

  1、类的继承格式

    在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:   

class 父类 {
}

class 子类 extends 父类 {
}

  2、继承的特性  

    • 子类拥有父类非private的属性,方法。
    • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
    • 子类可以用自己的方式实现父类的方法。
    • Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。
    • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系) 

  3、继承关键字

  继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,

  则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。

  extends关键字

    在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。     

public class Animal {
    private String name;
    private int id;
    public Animal(String myName, String myid) {
        //初始化属性值
    }
    public void eat() {  //吃东西方法的具体实现  }
    public void sleep() { //睡觉方法的具体实现  }
} 

public class Penguin  extends  Animal{
}

  implements关键字

    使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。  

implements 关键字
public interface A {
    public void eat();
    public void sleep();
}

public interface B {
    public void show();
}

public class C implements A,B {
}

2、Java中构造器

   1、概念  

  又称为 构造方法,constructor   构造器用于构造该类的实例。

  构造器是一个创建对象时被自动调用的特殊方法,为的是初始化。构造器的名称应与类的名称一致。 

  当创建一个个对象时,系统会该对象的属性默认初始化,基本类型属性的值为0(数值类型),false(布尔类型),把所有的引用类型设置为null.

构造器可以改变这种默认的初始化。

  2、构造器的语法格式的详细说明

修饰符: 修饰符可以省略,也可以是public,protected,private其中之一
构造器名:构造器名必须和类名相同
形参列表:和定义方法形参列表的格式完全相同

指的指出的是,构造器不能定义返回值类型声明,也不能声明void定义构造器没有返回值,

如果为构造器定义了返回值类型,或者使用了void定义构造器没有返回值,编译时不会出错

但java会把这个所谓的构造器当做方法来处理

3、构造器与方法的不同

    

  4、应用

    实例演示:计算坐标点的距离

    实体类Point代码:  

1 public class Point {
 2
 3     // 点的属性 横纵坐标
 4     int x;
 5     int y;
 6
 7     // 默认无参构造器
 8     public Point(){
 9         System.out.println("默认构造。");
10     }
11
12     // 有参构造1
13     public Point(int a,int b){
14         System.out.println("有参构造。");
15         // 给对象赋值
16         x = a;
17         y = b;
18     }
19     // 有参构造2(重载)
20     public Point(int a){
21 //        System.out.println();
22         this(a,a); // 重载 调用上面的有参构造1(此语法专门用来构造方法间调用,必须写在构造方法的第一行)
23     }
24
25     /**
26      * 点距离的计算方法
27      * 参数分别为:无参 点坐标 点对象
28      * 方法重载
29      */
30     public double distance(){ // 无参
31         return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2)); // 到原点的距离
32     }
33
34     // 到某个点的距离
35     public double distance(int a, int b){ // 参数为点坐标
36         return Math.sqrt(Math.pow(this.x-a, 2)+Math.pow(this.y-b, 2));
37     }
38
39     public double distance(Point p){ // 参数为点对象
40         return distance(p.x, p.y);
41     }
42
43 }

PrintDemo 

1 public class PointDemo {
 2     public static void main(String[] args) {
 3
 4         Point p1 = new Point(3,2);
 5         System.out.println("p1的坐标是:" + "(" + p1.x + "," + p1.y + ")");
 6
 7         Point p2 = new Point(5);
 8         System.out.println("p2的坐标是:" + "(" + p2.x + "," + p2.y + ")");
 9
10         /**
11          * 求点到点的距离
12          */
13         Point p = new Point(6,8);
14         System.out.println("到原点的距离为:" + p.distance()); // 到原点的距离
15         System.out.println("到另一个点的距离为:" + p.distance(3, 3)); // 到(3,3)的距离
16         System.out.println("到某个点对象的距离为:" + p.distance(p2)); // 到点对象p2的距离
17     }
18 }

  输出为:

    有参构造。
    p1的坐标是:(3,2)
    有参构造。
    p2的坐标是:(5,5)
    有参构造。
    到原点的距离为:10.0
    到另一个点的距离为:5.830951894845301
    到某个点对象的距离为:3.1622776601683795

3、java中的this和super

  1、this关键字

    this 关键字表示当前对象。可用于:

    • 调用当前类的构造方法,并且必须是方法的第一条语句。如:this(); 调用默认构造方法。this(参数); 调用带参构造方法。
    • 限定当前对象的数据域变量。一般用于方法内的局部变量与对象的数据域变量同名的情况。如 this.num = num。this.num 表示当前对象的数据域变量 num,而 num 表示方法中的局部变量。

   2、super 关键字

    super 表示使用它的类的父类。super 可用于:

    • 调用父类的构造方法;
    • 调用父类的方法(子类覆盖了父类的方法时);
    • 访问父类的数据域(可以这样用但没有必要这样用)。

   调用父类的构造方法语法:   

super();  

或   

super(参数列表);

    注意:super 语句必须是子类构造方法的第一条语句。不能在子类中使用父类构造方法名来调用父类构造方法。 父类的构造方法不被子类继承。

        调用父类的构造方法的唯一途径是使用 super 关键字,如果子类中没显式调用,则编译器自动将 super(); 作为子类构造方法的第一条语句。

          这会形成一个构造方法链。

        静态方法中不能使用 super 关键字。

  调用父类的方法语法:

    super.方法名(参数列表);

    如果是继承的方法,是没有必要使用 super 来调用,直接即可调用。但如果子类覆盖或重写了父类的方法,则只有使用 super 才能在子类中调用父类中的被重写的方法。

时间: 2024-10-11 07:27:02

java基础知识--继承的相关文章

java基础知识—继承

1.不能被继承的父类成员: private成员.子类与父类不在同包,使用默认访问权限的成员.构造方法. 2.访问修饰符: 访问修饰符        本类       同包      子类     其它 private             √ 默认(friendly)    √          √ protected         √          √         √ public              √          √         √         √ 3.多重

Java 基础知识之-------------Override 与 Overload

override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用.对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法.除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法.在覆盖要注意以下的几点: 1.覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果: 2.覆盖的方法的返回值必须和被覆盖的方法的返回一致: 3.覆盖的方法所抛出的异常必须和被覆盖方法的所抛

java基础知识(二)

1.关于static关键字总结: 1.不能在static修饰的方法中引用this变量,只能引用一些静态变量或方法,或new新的对象(可以定义局部变量). 简言之,静态方法或块中,只能引用静态的方法或变量. 2.类中的成员变量(static修饰)有缺省值,而类的定义的方法中的局部变量没有缺省值. 3.在类的构造器中,可以引用任何的静态或非静态的变量和方法,可以在非static方法中调用static方法. 4.static{}块中的代码在类装载中仅执行一次. 5.在7-7,A staticmetho

java基础知识回顾之关键字

其实java中的常用关键字并不多,总共加起来也没有多少个,具体见如下这张表: private,protect,public 在java中,在类,类的属性和累的方法前面加上一个修饰符来对其进行访问权限上的控制.除了使用private,protect,public之外, 还有一种是default情况,即使不加任何权限修饰符.关于这四中情况的权限差别见下表: 注意:default不是修饰符,他表示一种不加任何修饰符的情况. 这里,主要看一看static,instanceof,final关键字的含义和如

【java基础知识总结】-特别针对零基础学习JAVA的初学者

JAVA基础知识总结,对于大多数想要学习JAVA编程语言的人员来说或者对于那些已经在学习路上的新手来说,掌握以下的JAVA基础知识,或许将更有利于你快速掌握好这门语言.以下是本人对JAVA基础知识做了一下小结,如有纰漏,还望大家不吝赐教. 1.对象的初始化 (1)非静态对象的初始化 在创建对象时,对象所在类的所有数据成员会首先进行初始化. 基本类型:int型,初始化为0. 如果为对象:这些对象会按顺序初始化. ※在所有类成员初始化完成之后,才调用本类的构造方法创建对象. 构造方法的作用就是初始化

java基础知识回顾之面向对象

一 . 抽象类 什么是抽象类?很简单,就是用abstract关键字修饰,并允许包含未实现方法的类. 什么时候定义抽象类?在有些情况下,可能有些方法无法确定要怎么实现,这时就可以定义抽象类,无法实现的方法定义成抽象方法. 抽象类的特性: 1. 不能实例化,即不能创建对象,只能作为父类被继承. 2. 子类继承一个抽象类后,必须实现父类的抽象方法. 3. 抽象类中可以有抽象方法,也可以不包含抽象方法,但如果包含抽象方法,就必须定义成抽象类. public abstract class Shaoe{ p

java基础知识小小结

java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程序的文件名就可以随意命名了. 文档注释,是以单斜线加两个星形标记( /**)开头,并以一个星形标记加单斜线( */)结束.用这种方法注释的内容会被解释成程序的正式文档,并能包含进如 javadoc之类的工具生成的文档里,用以说明该程序的层次结构及其方法. Java 把整数常量的数据类型均视为 int

Java基础知识的三十个经典问答

Java基础知识的三十个经典问答 1.面向对象的特点 抽象: 抽象是或略一个主题中与当前目标的无关的因素,一边充分考虑有关的内容.抽象并不能解决目标中所有的问题,只能选择其中的一部分,忽略其他的部分.抽象包含两个方面:一是过程抽象:一是数据抽象. 继承 继承是一种联接类的层次模型,允许和鼓励类的重用,提供了一种明确的共性的方法.对象的一个新类可以从现有的类中派生,这叫做类的继承.心累继承了原始类 的特性,新类称为原始类的派生类或者是子类,原始类称为新类的基类或者父类.子类可以从父类那里继承父类的

长沙软件培训:Java基础知识总结(一)

Java本身知识点非常多,长沙软件培训在这里不做全面论述,仅做为一个引子,以增进理解和记忆,欢迎各位朋友与我进行探讨,共同进步. Java基础知识总结(一) 1. import关键字 (1)import语句必须定义在所有的class定义之前. (2)import语句只是为编译器指明了一个路径,并不像C或C++中的#include,所以用import .*并不影响性能 2.Java中的类名与文件名 (1).在一个java文件中可以有多于一个类定义(更常见于某些组件的监听器类),但只能有一个 pub