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 }
原文地址:https://www.cnblogs.com/2Bthebest1/p/8408578.html