zoukankan      html  css  js  c++  java
  • 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 才能在子类中调用父类中的被重写的方法。

    千里路我只陪你一程,从此艳阳风雪我不问!
  • 相关阅读:
    DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]])
    将BYTE[]中的字符的16进制形式作为字符串存入CString对象并返回
    VC调用存储过程的通用方法(ORACLE篇)
    Oracle中插入Date数据
    Oracle 存储过程返回结果集怎么这么费劲?
    从字符串中提取BCD码,转换为UINT数据并返回
    Know more about AWR Parse Statistics
    Slide:了解Oracle在线重定义online redefinition
    11gR2新特性:LMHB Lock Manager Heart Beat后台进程
    利用Oracle在线重定义Online Redefinition清理历史数据
  • 原文地址:https://www.cnblogs.com/huststl/p/7587346.html
Copyright © 2011-2022 走看看