面向对象编程语言中,诸如Java等,通过不同的访问修饰符来控制类成员(如属性、方法)的可见性和可访问性。这些修饰符包括`public`、`private`、`protected`以及`final`和`abstract`等。下面将详细解释这些关键字的意义及其在面向对象设计中的作用。 ### 1. `public` `public`是最开放的访问修饰符,意味着无论在哪一个类中都可以访问被`public`修饰的成员。例如: ```java public class A { public String name = "xu"; public int age = 23; public String getName() { return name; } public int getAge() { return age; } } ``` 在这个例子中,`name`和`age`都是公开的,可以在任何地方被访问。`getName()`和`getAge()`也是公开的方法,用于获取属性值。 ### 2. `private` `private`是限制最严格的访问修饰符,意味着只有定义它的类才能访问被`private`修饰的成员。例如: ```java public class A { private String name = "xu"; private int age = 23; public String getName() { return name; } public int getAge() { return age; } } public class B { public B() { A a1 = new A(); // string x = a1.name; 无法直接访问A的name String x = a1.getName(); // 可以通过方法访问 // int age = a1.age; 不能这样做 int age = a1.getAge(); // 可以通过方法访问 } } ``` 在这个例子中,即使`B`类可以创建`A`类的对象,也无法直接访问`A`类的私有成员。 ### 3. `protected` `protected`的访问级别介于`public`和`private`之间,它允许同一包中的类或子类访问被`protected`修饰的成员。例如: ```java class A { protected int x = 123; public int getX() { return x; } } class B extends A { static void main(String[] args) { A a = new A(); // a.x = 10; 错误:CS1540,因为x只能被A的派生类访问 // a.getX(); OK,因为这个类继承自A B b = new B(); b.x = 10; // 可以访问 } } ``` 在这个例子中,`B`类继承了`A`类,因此可以直接访问`A`类中的`protected`成员`x`。 ### 4. `final` `final`修饰符可以应用于类、方法和变量。对于类来说,`final`意味着该类不能被继承;对于方法来说,`final`意味着该方法不能被重写;对于变量来说,`final`意味着一旦赋值后就不能再修改。 ```java public final class Test {} // final类不能被继承 class A { final void a() {} // final方法不能被重写 } class B extends A { void a() { } // 编译错误:Cannot override the final method from A } ``` ### 5. `abstract` `abstract`修饰符用于声明抽象类或抽象方法。抽象类不能被实例化,它主要用于被其他类继承。抽象方法没有实现体,必须由子类来实现。 ```java abstract class E { public abstract void show(); // 抽象方法 } class F extends E { @Override public void show() { // 实现方法体 } } E e = new F(); e.show(); ``` 在这个例子中,`E`是一个抽象类,`F`继承自`E`并实现了抽象方法`show()`。 ### 6. `super` 和 `this` - `super`: 用于访问父类的属性和方法。 - `this`: 用于引用当前对象自身。 示例代码: ```java class Point { private int x, y; public Point(int x, int y) { this.x = x; // 使用this引用当前对象 this.y = y; } public void draw() {} } class Circle extends Point { private int radius; public Circle(int x, int y, int r) { super(x, y); // 调用父类构造器 this.radius = r; } public void draw() { super.draw(); // 调用父类方法 drawCircle(); } } ``` 在这个例子中,`Circle`继承自`Point`,并通过`super`调用了父类的构造器,并且在`draw`方法中调用了父类的`draw`方法。 以上就是关于面向对象编程中`public`、`private`、`protected`、`final`、`abstract`、`super`和`this`等关键字的详细介绍。这些概念是面向对象编程的基础,掌握它们有助于更好地理解和应用面向对象的设计原则和技术。
一:private
private --只有在声明它的类或结构中访问.
例:
public class A
{
private string name="xu";
int age="23"; //默认为private
}
这时就不能在A的外部直接读取name和age的值,只有通过A类中的方法或属性完成。完整示例:
public class A
{
private string name="xu";
int age="23"; //默认为private
public string GetName() //这时的属性或方法就不能再声明为private 或protected了,这样会导致在外部同样不能访问。
{
return name;
}
public int Age
{
get { retunr age;}
}
}
public class B
{
public B()
{
A a1=new A();
//string x=a1.name; 这样就不能访问A的name了
string x=a1.GetName() ; //通过方法来访问。
int age=a1.Age; //通过属性来访问
}
}
二 protected
protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。
个人理解为:受保护成员只能在声明它的类中访问(如同private一样)或者通过它的派生类来访问。
如下例:
using System;
class A
{
protected int x = 123;
public int X{get return x;}
}
class B : A
{
static void Main()
{
A a = new A();
B b = new B();
// Error CS1540, because x can only be accessed by
// classes derived from A.
// a.x = 10;
// a.X;----这样就可以读取
// OK, because this class derives from A.
b.x = 10;
}
剩余5页未读,继续阅读
- 粉丝: 35
- 资源: 27
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (175601006)51单片机交通信号灯系统设计
- Starter SINAMICS S120驱动第三方直线永磁同步电机系列视频-调试演示.mp4
- (174755032)抽烟、烟雾检测voc数据集
- 基于滑膜控制的差动制动防侧翻稳定性控制,上层通过滑膜控制产生期望的横摆力矩,下层根据对应的paper实现对应的制动力矩分配,实现车辆的防侧翻稳定性控制,通过通过carsim和simulink联合仿真
- 伺服系统基于陷波滤波器双惯量伺服系统机械谐振抑制matlab Simulink仿真 1.模型简介 模型为基于陷波滤波器的双惯量伺服系统机械谐振抑制仿真,采用Matlab R2018a Simul
- (175989002)DDR4 JESD79-4C.pdf
- lanchaoHunanHoutaiQiantai
- (177377030)Python 爬虫.zip
- (177537818)python爬虫基础知识及爬虫实例.zip
- 自动驾驶横纵向耦合控制-复现Apollo横纵向控制 基于动力学误差模型,使用mpc算法,一个控制器同时控制横向和纵向,实现横纵向耦合控制 matlab与simulink联合仿真,纵向控制已经做好油门刹