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 加入
还未添加个人简介










评论