public protected private非常生动的解释

public protected private非常生动的解释

原文地址:http://blog.sina.com.cn/s/blog_4a1f4666010096ur.html

说到public、protected和private三个修饰符,刚学C++时,被教教材上的那个表搞得晕晕忽忽的。曾几时为了考试还去背过那个表,现在想想真是哭笑不得。后来用得多了,就发现其实就是很简单的道理。

   我们可以把一个类看作是一个人,类的数据成员看作是财产,而类的成员函数看作是对于财产的使用(包括花钱和挣钱)。

   如果这个人很担心别人使用自己的财产,那就将其据为私有(private),这样只有自己才可以使用私有财产,就连自己的子孙也无缘享用;不管是儿子以何种方式继承的,都是幌子,老子什么也没给你留。

   如果这个人还算大方点,有了将财产与子孙共享的想法,就将其保护(protected)起来,当然想法归想法,那还得看子孙们愿意不愿意继承这份财产了(一般是愿意的),如果儿子想独吞,即不想让财产再向自己的下一代传承,那他就将这部分保护的财产私有(private)继承下来,倘若儿子还想将其传承到自己的下一带甚至更远的子孙,那就保护(protected)继承或者公有(public)继承下来,这时的公有继承其实是个幌子,说的好听,但财产都保护起来了,公有继承和保护继承一个样,反正外人用不上;

   如果这个人很大方,我的就是大家的,那就干脆财产宣布公有(public),这样自己可以用,外人也可以用,当然儿子也可以用。但是这终归是老子的想法,儿子没法管老子,但儿子如果小心眼儿,不想让别人甚至是自己的子孙从自己这里享用(私用继承),或者只想让自己子孙从自己这里拿钱享用(保护继承),当然这只是儿子小心眼罢了,其实财产不能从他这里拿出,从他父亲那里照样可以拿得出。如果儿子想通了,干脆也公有继承下来,这样就像他父亲那样慷慨了。

   当然,以上所说的享用财产还有另一层意思,那就是使用后的情况,也就是说财产有进有出,和别人共享当然有挣有赔,不是说私有了就一定能赚大钱,而或许公有了挣得更多,只是说和别人共享后,就不是那么安全了!另外,如果管这个男人的人(一般是他老婆)很会打理,财产经过估量后,分情况对待,某些财产可以和别人一起使用,一起收益(public);某些财产是给子孙留的,只有自己和子孙一起使用,一起收益(protected);还有一部分财产是老两口子养老用的,自己使用(private)。至于儿子们是怎么继承的,那就看儿媳妇了,呵呵。其实程序员扮演的就是这里的老婆以及儿媳妇的角色。

   当然这个人使用财产的方式也是类似的情况,可以和别人共享,也可以不是;可以传承,也可以不是。

   总之,想和别人以及子孙共享,就公有;想和子孙共享,就保护;想自己使用,就私有。至于继承方式,那就看儿子的想法了,儿子能继承的部分也只有公有的和保护的,公有的那部分就完全教给儿子自己处理了,儿子想和别人以及子孙共享,就公有继承;想和子孙共享,就保护继承;想自己使用,就私有继承。继承的保护财产,儿子就没那么大的权利了,最多也就只能和自己的儿子共享(保护继承或公有继承),或者干脆自己使用(私有继承)。

注:这里所描述的是C++/C的情况。



转载地址:http://www.jb51.net/article/41642.htm

三种访问权限

public:可以被任意实体访问

protected:只允许子类及本类的成员函数访问

private:只允许本类的成员函数访问

三种继承方式

public 继承

protect 继承

private 继承

组合结果

基类中 继承方式 子类中

public & public继承 => public

public & protected继承 => protected

public & private继承 = > private


protected & public继承 => protected

protected & protected继承 => protected

protected & private继承 = > private


private & public继承 => 子类无权访问

private & protected继承 => 子类无权访问

private & private继承 = > 子类无权访问

由以上组合结果可以看出

1、public继承不改变基类成员的访问权限

2、private继承使得基类所有成员在子类中的访问权限变为private

3、protected继承将基类中public成员变为子类的protected成员,其它成员的访问 权限不变。

4、基类中的private成员不受继承方式的影响,子类永远无权访问。

此外,在使用private继承时,还存在另外一种机制:准许访问 。

我们已经知道,在基类以private方式被继承时,其public和protected成员在子类中变为private成员。然而某些情况下,需要在子类中将一个或多个继承的成员恢复其在基类中的访问权限。

C++支持以两种方式实现该目的

方法一,使用using 语句,这是C++标准建议使用的方式

方法二,使用访问声明,形式为 base-class::member;, 位置在子类中适当的访问声明处。(注,只能恢复原有访问权限,而不能提高或降低访问权限)

c++ 中为什么要定义public protect private 三种访问权限?

有些我们需要给外面看的,也就是对外接口,那么就是public,如果没有,那么我们做的工作将是毫无意义的,(别人没法用)

如果我们不想让别人知道内部的实现细节,那么就是private,比如,我们这么:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你想写一个最简单的飞翔的小鸟的 Java 程序,可以先了解 Java 的图形绘制功能。Java 提供了一个叫做 `Graphics` 的图形绘制类,可以用来绘制图形、填充颜色、画线等。 你可以通过创建一个类继承 `JComponent` 类,重写其 `paintComponent` 方法,在方法内实现绘制图形。 以下是一个最简单的飞翔的小鸟的 Java 代码示例: ``` import java.awt.*; import javax.swing.*; public class FlyingBird extends JComponent { public void paintComponent(Graphics g) { // 设置颜色 g.setColor(Color.RED); // 绘制圆形,表示小鸟的身体 g.fillOval(0, 0, 50, 50); // 设置颜色 g.setColor(Color.BLACK); // 绘制两条线,表示小鸟的翅膀 g.drawLine(0, 25, 20, 10); g.drawLine(50, 25, 30, 10); } public static void main(String[] args) { JFrame frame = new JFrame("Flying Bird"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); FlyingBird bird = new FlyingBird(); frame.add(bird); frame.setSize(100, 100); frame.setVisible(true); } } ``` 上面的代码实现了一个绘制红色圆形和黑色线条的程序,这个圆形和线条模拟了小鸟的飞行效果。你可以根据自己的需求,修改代码,让小鸟飞得更加生动。 ### 回答2: 用JAVA编写一个简单的飞翔的小鸟程序很简单。首先,我们需要创建一个Bird类来表示小鸟,它应该具有以下属性和方法: 属性: - x, y:小鸟的当前位置 - velocity:小鸟的当前速度 - gravity:重力加速度 - jumpForce:小鸟向上跳跃时的力量 - image:小鸟的图像 方法: - fly():小鸟向上飞行,即给小鸟一个向上的速度 - fall():小鸟下落,即根据重力加速度更新小鸟的速度和位置 - display():在屏幕上显示小鸟的图像 首先,在Bird类中定义属性和方法: ```java import javax.swing.*; import java.awt.*; public class Bird { private int x; private int y; private int velocity; private int gravity; private int jumpForce; private Image image; public Bird() { x = 100; // 初始位置 y = 200; // 初始位置 velocity = 0; gravity = 1; jumpForce = -10; image = new ImageIcon("bird.png").getImage(); // 小鸟的图像 } public void fly() { velocity += jumpForce; // 给小鸟一个向上的速度 } public void fall() { velocity += gravity; // 根据重力加速度更新小鸟的速度 y += velocity; // 更新小鸟的位置 } public void display(Graphics g) { g.drawImage(image, x, y, null); // 在屏幕上显示小鸟的图像 } } ``` 接下来,在主类中,我们可以使用Java的Swing库来创建一个窗口,并在窗口中显示小鸟。我们需要实现一个继承自JPanel的自定义面板类,在其中重写paintComponent()方法,在该方法中绘制小鸟: ```java import javax.swing.*; import java.awt.*; public class FlyingBird extends JPanel { private Bird bird; public FlyingBird() { bird = new Bird(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); bird.fall(); // 更新小鸟的位置 bird.display(g); // 在窗口中显示小鸟 repaint(); // 不断绘制,实现动画效果 } public static void main(String[] args) { JFrame frame = new JFrame("Flying Bird"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(800, 600); FlyingBird panel = new FlyingBird(); frame.add(panel); frame.setVisible(true); } } ``` 以上就是一个最简单的用JAVA编写的飞翔的小鸟程序。运行程序后,可以看到一个窗口,其中显示着小鸟的图像,并实现了小鸟向上飞行和下落的动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值