Java 面向对象
- 2022 年 7 月 31 日
本文字数:2053 字
阅读完需:约 7 分钟
Super 关键字
package com.huo.object.oriented;
class Base {
String name;
Base(String n) {
name = n;
}
void print() {
System.out.println(getClass() + " name: " + name);
}
}
class D1 extends Base {
String name;
D1(String n) {
super(n + "-sub"); // 调用父类构造方法
name = n;
}
void print() {
super.print();// super 指向它上一个父类(Base),即便调用的对象是D2
System.out.println(getClass() + " name: " + name);
// Java中允许子类中出现和父类一样的同名变量,如果想在子类中访问父类中的同名特征,那么super就不能省略
System.out.println(getClass() + " super name: " + super.name);
}
}
class D2 extends D1 {
String name;
D2(String n) {
super(n + "-sub");
name = n;
}
}
public class TestSuper {
public static void run() {
D1 d1 = new D1("d1");
D2 d2 = new D2("d2");
System.out.println("------------------------------------");
d1.print();
System.out.println("------------------------------------");
System.out.println("------------------------------------");
d2.print();
System.out.println("------------------------------------");
}
}
复制代码
(1)super()表示通过子类的构造方法调用父类的构造方法。
(2)当一个构造方法第一行:既没有 this(),又没有 super()的话,会默认会有一个 super();表示通过当前子类构造方法调用父类的无参数构造方法。所以必须保证父类的无参数构造方法是存在的。
(3)this()和 super()不能共存,都是只能出现在构造方法第一行。
内存图:
类访问规则
类可声明两种访问级别:
什么都不声明--class A
这种类只能在包内被使用
什么为 public-- public class A
这种类可以在其他包中使用
同一个文件中只能有一个 class 是 public
导入静态变量方式
import static java.lang.Math.*; // 导入java.lang包的Math类的所有静态变量
import static java.lang.Math.PI; // 导入java.lang包的Math类的PI静态变量
复制代码
方法
重载
方法的返回类型,访问级别和 throws 子句对使其成为重载方法没有任何影响
public class Main {
public static int max(int x, int y) {
}
public static int max(int...num) {
}
}
int max = Main.max(12, 13); // Java将调用max(int x,int y)。
// Java首先尝试使用对参数数量的精确匹配来找到方法声明.
// 即调用max(int x, int y)
复制代码
public class Main {
public static int max(int... num) {
return 0;
}
public static int max(double... num) {
return 0;
}
}
int max = Main.max(); // 会导致编译错误
复制代码
参数传递
java 参数传递是引用传递(和 c++的引用一样的行为)
class Modify {
String name = "none";
static void modifyInstanceMember(Modify m, String name) {
m.name = name; // 和c++的引用一样,指向同一个内存,对它对修改影响原值
}
static void modifyQuota(Modify m) {
m = new Modify(); // 所指的对象被修改,后面对它对修改都不会影响原对象
m.name = "quota";
out.println("new quota value:" + m.name);
}
static void forbidModifyQuota(final Modify m, String name) { // 禁止m更换成别的对象的引用
//m = new Modify(); // Cannot assign a value to final variable 'm'
m.name = name; // 声明为final后,依然可以修改成员变量的值
}
public static void testModifyInstanceMember() {
Modify m = new Modify();
out.println("old value:" + m.name); // old value:none
modifyInstanceMember(m, "xxx");
out.println("current value:" + m.name); // current value:xxx
}
public static void testModifyQuota() {
Modify m = new Modify();
out.println("old value:" + m.name); // old value:none
modifyQuota(m); // new quota value:quota
out.println("current value:" + m.name); // current value:none
}
public static void testForbidModifyQuota() {
Modify m = new Modify();
out.println("old value:" + m.name); // old value:none
forbidModifyQuota(m, "yyy");
out.println("current value:" + m.name); // current value:xxxx
}
}
复制代码
继承
访问级别
如果使用 protected
关键字将类成员声明为 protected,则可以从同一个包或从类的后代访问,即使后代位于不同的包中也是如此
划线
评论
复制
发布于: 刚刚阅读数: 3
还未添加个人签名 2019.04.21 加入
还未添加个人简介
评论