访问
写一个类 Lid,带私有字段 int seal、构造函数 Lid(int n)(执行 seal = n;)和公开方法 int Read()(返回 seal)。在 Pine 里保留 Main,用 Lid L = new Lid(9); 创建一个 lid,再写出 L.Read()。两种类型放在同一教学文件里,这样 dotnet run 仍然简单。用 dotnet run 运行。屏幕应显示一行:9。字段在 Lid 内保持私有。公开方法是 Pine 取得数字的通道。请把启动用的公共类名保持为 Pine。
谁能看到成员
在 static 页,你通过类名调用 Cup.Mark()。这里的新词是 private 和 public。private 字段只在自己的类里可见。同一文件中的其他类——包括 Pine——在 seal 为私有时不能写 L.seal。public 方法仍可从 Pine 运行并返回被隐藏的值。
打开 Pine 文件。启动类名仍是 Pine。本页不改启动名。如果 Main 里只剩 static 演示的 Cup.Mark();,删掉它。删掉任何残留的 Cup 类。删掉任何 Jar 残留。删掉 ReadLine 行。你保留的文件不应等待输入。
在 Pine 的花括号外——仍在同一文件里——写 public class Lid。在花括号内声明 private int seal;。写构造函数 Lid(int n) { seal = n; }。再写 public int Read() { return seal; }。本页 Lid 里没有 Main。运行前先保存文件。
字段需要 private,这样 Pine 不能按名碰 seal。方法需要 public,这样 Pine 能调用 Read。返回类型是 int,因为 Read 把保存的数字还给调用方。在方法体内保留 return seal;。
using System;
public class Lid
{
private int seal;
Lid(int n)
{
seal = n;
}
public int Read()
{
return seal;
}
}
Pine 创建 lid 并调用 Read
Pine 保留 public static void Main()。在 Main 内按顺序写两行:Lid L = new Lid(9);,然后 Console.WriteLine(L.Read());。构造函数把 9 写入私有字段。调用 L.Read() 返回该值。写出操作会显示它。本页你不写 Cup.Mark();——那是 static 课。
using System;
public class Pine
{
public static void Main()
{
Lid L = new Lid(9);
Console.WriteLine(L.Read());
}
}
public class Lid
{
private int seal;
Lid(int n)
{
seal = n;
}
public int Read()
{
return seal;
}
}
从文件顶部读你保留的版本。using System; 准备短名称。public class Pine 是启动类。public static void Main() 是运行入口。表达式 new Lid(9) 创建一个 lid 并把 9 放进 seal。调用 L.Read() 进入该对象的公开方法。方法体返回 seal,值 9 回到 Main。然后 Main 写出该返回值,屏幕显示 9。
用 dotnet run 运行。程序写一行后结束。不会等你输入。如果 dotnet run 在等待,文件里还有 ReadLine——删掉该行,在 Pine 保留 new Lid(9) 和 Console.WriteLine(L.Read());,在 Lid 保留 private int seal 和 public int Read()。屏幕显示 9。若屏幕是 2,可能还在跑残留的 Cup tally 演示。若编译在 L.seal 失败,说明你想从 Main 读私有字段——改用 L.Read()。
若写 Console.WriteLine(L.seal); 而 seal 是 private,编译会拒绝。这次拒绝就是本课要点。走公开入口:L.Read()。若 seal 不加 private,在这种简单形状下默认访问仍可能从 Pine 编译通过——本页不想教那种用法——请故意给字段加 private。
与 static Cup 及纯 public 字段对比
在 static 页,static 工作之后你通过类名访问 Cup.tally。本页对 Pine 隐藏 seal,只打开 Read。残留 Cup.Mark(); Cup.Mark(); Console.WriteLine(Cup.tally); 是另一课。本页请保留 Lid、Pine 和 L.Read()。
你可以把所有字段做成 public 并在 Main 写 L.seal。本课选择 private:对象拥有存储,Pine 通过方法询问。只写 Console.WriteLine(L); 不会出现干净的 9。要写 Console.WriteLine(L.Read()); 才能看到返回的数字。
两个 lid 各有一份私有 seal
每个 new Lid(...) 都有自己的私有 seal。可以写 Lid a = new Lid(3); 和 Lid b = new Lid(8);,再写 a.Read() 与 b.Read()。关键字 private 不会在对象之间共享一个 seal,只是禁止其他类按字段名访问。
using System;
public class Pine
{
public static void Main()
{
Lid a = new Lid(3);
Lid b = new Lid(8);
Console.WriteLine(a.Read());
Console.WriteLine(b.Read());
}
}
public class Lid
{
private int seal;
Lid(int n)
{
seal = n;
}
public int Read()
{
return seal;
}
}
再次 dotnet run。屏幕应一行显示 3,下一行显示 8。每次 Read 返回各自对象的私有字段。若两行相同,检查你是否用不同参数调用了两次 new Lid(...)。若屏幕仍只有单个 9,你可能还在单 lid 演示——第一个检查点够了;第二个检查用双 lid 文件。
若编译抱怨 Read,确认方法头包含 public 和 int。若 Main 仍调用 Cup.Mark(),删掉 static 残留,让访问课显示 lid 数字而不是 tally。
本页为 namespaces 留下什么
本页用 private 和 public,让一个类可以隐藏字段,仍通过方法共享值。下一页 namespaces 把类型归到名称下,大程序更易组织。请停留在这页的访问主题。除非你已经会,不要在本页发明 namespace 包装;本课目标是字段 private、Read 为 public。
不要把 Lid 嵌进 Pine 的花括号。本页两个类在文件中并列。若编译 Pine 时找不到 Lid,检查 public class Lid 是否在同一文件。若屏幕是 0,构造函数可能没写入——保留 Lid(int n) { seal = n; },在 new 之后调用 Read。
你可以声明 private int seal;,写 Lid(int n) { seal = n; } 和 public int Read() { return seal; },在 Pine.Main 运行 Lid L = new Lid(9); 再写 L.Read()。用 dotnet run 运行。屏幕显示 9。私有字段留在 Lid 内。公开方法把数字交给 Pine。把 private 想成关上的抽屉,把 Read 想成允许查看的入口。Pine 是你用 dotnet run 打开的门。下一页是 namespaces,类型归在组名之下,大文件保持清晰。
字段保持 private。Read 保持 public。调用保持 L.Read(),不要 L.seal。这三条习惯是本页过关点。把 Main 里的 Cup.Mark() 残留清掉,避免屏幕误显示 tally。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部