zoukankan      html  css  js  c++  java
  • Java学习(四)

    Java中类的操作与C++中基本相同,但舍弃了一些比较复杂但实际用处不多的操作,比如多继承,在此用接口来表示。

     1 package helloWorld;
     2 
     3 public class Class {
     4     private int n;
     5     public Class()
     6     {
     7         this(1);//相当于public Class(1)    {this.n=n;}
     8     }
     9     public Class(int n)
    10     {
    11         this.n=n;
    12     }
    13     
    14     void print()
    15     {
    16         System.out.println(n);
    17     }
    18 }
    19 
    20 class ClassTemp extends Class
    21 {
    22     int m;
    23     
    24     /*
    25      * 类的初始化
    26      */
    27     public ClassTemp(int n)
    28     {
    29         this.m=n;
    30     }
    31     
    32     /*
    33      * 添加自定义函数
    34      */
    35     public void run()
    36     {
    37         System.out.println("Hello World!");
    38     }
    39     
    40     /*
    41      * 覆盖
    42      * @see helloWorld.Class#print()
    43      */
    44     @Override
    45     void print()
    46     {
    47         System.out.println(m);
    48     }
    49 }

    类的继承需要用extends来表示,函数的覆盖需要在函数前用@Override来声明(也可以不加)。子类继承父类的所有字段Field、非私有方法Method。但是不继承构造方法。

    在类中存在重载,即函数同名时可以通过变量名来区分不同的函数。以下就是两个不同的函数。

    1 void print(String str)
    2     {
    3         System.out.println(str);
    4     }
    5     
    6     void print(String str1,String str2)
    7     {
    8         System.out.println(str1+str2);
    9     }

    在编译器中,编译器会自动生成如下名称,用于预留空间给将要存储的数据。在代码中相同的函数名,实际上在编译器中是不相同的。

    $print_String
    $print_String_String

    在Java中还有一个与this指针相类似的关键字——super。super可以用于指向父类的字段、方法和构造函数,但不能指向子类。

    super与this的异同:1.this指向本类中包含的关键字、 方法;而super只是指向父类的关键字、方法、构造函数。2.this指针很难区分子类与父类重名的情况,包括字段重名、方法重名;而super可以让两重名字段与方法相互赋值。

    3.子类的构造方法通过super调用父类的构造方法来减少工作量。4.super访问父类的关键字或方法时,其权限要为protected或public,否则不能访问。5.this和super都不能与static字段共存。

    此外,在使用this和super指针时,都需要将其放在方法中的第一行,否则会出错。

    以下是由上面更该的一些程序:

     1 package helloWorld;
     2 
     3 public class Class {
     4     private int n;
     5     protected int p;
     6     public Class()
     7     {
     8         this(1);//相当于public Class(1)    {this.n=n;}
     9     }
    10     public Class(int n)
    11     {
    12         this.n=n;
    13     }
    14     
    15     void print()
    16     {
    17         System.out.println(n);
    18     }
    19 }
    20 
    21 class ClassTemp extends Class
    22 {
    23     int m;
    24     int n;
    25     
    26     /*
    27      * 类的初始化
    28      */
    29     public ClassTemp(int a,int b,int c )
    30     {
    31         super(a);//利用super调用父类Class的构造函数
    32         m=b;
    33         this.n=c;
    34         super.p=c;//访问父类字段需要使用protected或public
    35     }
    36     
    37     /*
    38      * 添加自定义函数
    39      */
    40     public void run()
    41     {
    42         super.print();//利用super调用父类的函数
    43         System.out.println("Hello World!");
    44     }
    45     
    46     /*
    47      * 重载
    48      * @see helloWorld.Class#print()
    49      */
    50     @Override
    51     void print()
    52     {
    53         System.out.println(m);
    54     }
    55         
    56 }
  • 相关阅读:
    利用QObject反射实现jsonrpc
    使用libuv实现生产者和消费者模式
    std::function赋值的几种方法
    Qt postEvent
    Qt由pcm数据生成wav文件
    Qt websocket协议的实现
    Python中json.dump() 和 json.dumps()的区别
    Appium环境搭建(Mac)
    Mac上搭建Python集成环境
    Mac OS终端利器iTerm2(完美替代bash)
  • 原文地址:https://www.cnblogs.com/2Bthebest1/p/8408578.html
Copyright © 2011-2022 走看看