在这篇文章中,我们将为您详细介绍Java中受保护的访问修饰符的内容,并且讨论关于java中受保护的访问修饰符是的相关问题。此外,我们还会涉及一些关于6-1java中的面相对象;使用包管理java中的类
在这篇文章中,我们将为您详细介绍Java中受保护的访问修饰符的内容,并且讨论关于java中受保护的访问修饰符是的相关问题。此外,我们还会涉及一些关于6-1 java中的面相对象;使用包管理java中的类;java中的访问修饰符;java中的this关键字、C# 中的访问修饰符、C#与Java中的访问修饰符最佳实践、java – 超类引用的访问修饰符和方法[复制]的知识,以帮助您更全面地了解这个主题。
本文目录一览:- Java中受保护的访问修饰符(java中受保护的访问修饰符是)
- 6-1 java中的面相对象;使用包管理java中的类;java中的访问修饰符;java中的this关键字
- C# 中的访问修饰符
- C#与Java中的访问修饰符最佳实践
- java – 超类引用的访问修饰符和方法[复制]
Java中受保护的访问修饰符(java中受保护的访问修饰符是)
我在理解Java(或其背后的设计)中的受保护的访问修饰符时遇到了一些麻烦。我认为这意味着程序包访问和通过继承包含抽象成员的类的对象的访问。
我编写了以下示例代码。我看到,如果未注释,注释掉的行会产生编译错误。为什么我可以通过Second中的Second对象而不是Second中的First对象访问pro?
package first;
public class First {
protected void pro(){
System.out.println("Can see protected method");
}
}
package first;
public class InFirst {
public static void main(String[] args){
First fst = new First();
fst.pro();
}
}
package second;
import first.First;
public class Second extends First {
public static void main(String[] args){
First fst = new First();
// fst.pro();
Second sec = new Second();
sec.pro();
}
}
6-1 java中的面相对象;使用包管理java中的类;java中的访问修饰符;java中的this关键字
1.
1.面向对象三大特性:封装,继承,多态
2.封装的实现步骤:
2.使用包管理java中的类
3.java中的访问修饰符
4.java中的this关键字
C# 中的访问修饰符
访问修饰符指定 C# 中变量和函数的范围。以下是 C# 提供的访问修饰符:
Public
public 修饰符对成员的访问没有限制。
受保护
访问仅限于派生类或类定义。
内部
具有以下权限的程序内的内部访问修饰符访问它的声明。
受保护的内部
它同时具有受保护和内部访问修饰符提供的访问说明符。
私有
仅限于声明它的类内。指定为 private 的成员无法在类外部访问。
示例
让我们看一个 protected 访问修饰符的示例,访问受保护的成员 -
现场演示
using System; namespace MySpecifiers { class Demo { protected string name = "Website"; protected void Display(string str) { Console.WriteLine("Tabs: " + str); } } class Test : Demo { static void Main(string[] args) { Test t = new Test(); Console.WriteLine("Details: " + t.name); t.Display("Product"); t.Display("Services"); t.Display("Tools"); t.Display("Plugins"); } } }
输出
Details: Website Tabs: Product Tabs: Services Tabs: Tools Tabs: Plugins
以上就是C# 中的访问修饰符的详细内容,更多请关注php中文网其它相关文章!
C#与Java中的访问修饰符最佳实践
C#和Java似乎都实现了同一组访问修饰符;然而,令我困惑一段时间的东西现在是为什么java类似乎主要被声明为公共,而C#类似乎主要被声明为默认.这些语言是否有一些微妙之处可以强加这些差异,还是仅仅是一个惯例或什么?
我发现自己经常通过我的C#代码(我习惯性地将大多数类公开,除了内部类,匿名类,以及其他类别的狭窄范围和有用性)以试图取悦编译器,但是我想知道我是否可能遗漏了某些东西重要.
解决方法
这在C# From a Java Developer’s Perspective的“相同但不同:Access Modifiers”中进行了简要讨论.这个文件现在略有过时,但仍然是最相关的.
该列表有两个错误:
> C#的内部等同于Java的默认范围(这是它自己的范围).
> C#的内部保护等同于Java的保护.
另外,上面的文档没有提到类的默认访问修饰符,仅用于方法和属性/变量.
作为参考,c#中类的默认范围是内部的. Java是其通常的默认范围,如前所述.
java – 超类引用的访问修饰符和方法[复制]
> Why can’t I call a protected method from an inheriting class in another package in Java? 2个
为什么当我在子类中创建超类的引用时,只能从引用中调用public方法而不是受保护的方法. (这些类在不同的包中)
package pet; public class Dog { protected void bark(){}; void jump(){}; public void lick(){}; } package other; import pet.*; public class Husky extends Dog { public static void main(String[] args){ Husky h = new Husky(); h.bark(); //COMPILES (Husky is a subclass of Dog - Protected method) h.jump(); //DOES NOT COMPILE (Different packages - package-private access method) Dog d = new Dog(); d.bark(); //DOES NOT COMPILE WHY? d.jump(); //DOES NOT COMPILE (Different packages - package-private access method) d.lick(); //COMPILES (Method is public) } }
我的问题是为什么不编译d.bark()? bark方法有一个protected的访问修饰符,允许从同一个包或子类中的类访问它.发生什么了?
如果哈士奇引用能够访问bark方法,则通过相同的逻辑,dog引用也应该能够访问bark方法.
所以我只能假设Dog引用一定存在问题?
解决方法
对于你的问题:
Dog d = new Dog(); d.bark();
在运行时,方法由被引用的底层对象解析.这里的底层对象是Dog超类,我们也通过Dog自己访问它.这缩小了从包中访问受保护成员的问题,这是不允许的.
还有你的代码d.bark();在主方法中,它本身是一个来自Huskey的Object的独立实体.另一个有趣的事实是你甚至不能称之为Dog d = new Dog(); d.bark();来自Huskey类的另一个成员方法(这里是访问修饰符),但你可以直接在同一个成员方法中调用bark()方法(这里是继承).
希望能帮助到你!
关于Java中受保护的访问修饰符和java中受保护的访问修饰符是的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于6-1 java中的面相对象;使用包管理java中的类;java中的访问修饰符;java中的this关键字、C# 中的访问修饰符、C#与Java中的访问修饰符最佳实践、java – 超类引用的访问修饰符和方法[复制]的相关信息,请在本站寻找。
本文标签: