在Java和c#中如果不写访问修饰符,类和类成员默认的是啥访问修饰符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java和c#中如果不写访问修饰符,类和类成员默认的是啥访问修饰符?相关的知识,希望对你有一定的参考价值。

如题

参考技术A 省略类的访问修饰符,默认为internal

省略类成员的访问修饰符,默认为private
参考技术B 在java中不写访问修饰符就是包内可见,不是private,private是本类可见
包内可见是同一个包中的所有类都可见,无论类、类成员变量、类方法都是这样的
c#不知道

面向对象编程(OOP)————修饰符

一.类的修饰符

       Java语言中的权限修饰符主要包括private、public和protected,这些修饰符控制着对类和类的成员变量以及成员方法的访问。如果一个类的成员变量或成员方法被修饰为private,则该成员变量只能在本类中被使用,在子类中是不可见的,并且对其他包的类也是不可见的。如果将类的成员变量和成员方法的访问权限设置为public,则除了可以在本类使用这些数据之外,还可以在子类和其它包中的类中使用。如果一个类的访问权限被设置为private,这个类将隐藏其内的所有数据,以免用户直接访问它。如果需要使类中的数据被子类或其他包中的类使用,可以将这个类设置为public访问权限。如果一个类使用protected修饰符,那么只有本包内该类的子类或其他类可以访问此类中的成员变量和成员方法。

       这麽看来,public和protected修饰的类可以由子类访问,如果子类和父类不在同一包中,那么只有修饰符为public的类可以被子类进行访问。如果父类不允许通过继承产生的子类访问他的成员变量,那么必须使用private声明父类的这个成员变量。

 默认修饰符:只有一个包内的其他类和子类可以对该类进行访问,这类修饰符视为默认修饰符。

技术分享

1.修饰符的特点: 

   (1)public(公共的):无限制

   (2) protected (保护的):默认的、本包内

   (3)private(私有的):类内部、常用来修饰属性,再开放公共的方法

   用法:在类、属性、方法前面

2.成员变量的规范:

    (1)设成private

    (2)POJO简单JAVA对象:只有属性和getter、setter方法,没有业务逻辑。

 实战 : 构造一个汽车Car的类

技术分享
  1 package org.hanqi.pn0120;
  2 
  3 //汽车
  4 public class Car {
  5     
  6     //颜色
  7     private String yanse;
  8     
  9     //品牌
 10     private String  pinpai;
 11     
 12     //油箱容量
 13     private double youxiangrl=40;
 14     
 15     //当前油量
 16     private double dangqianyl=0;
 17     
 18     public double getDangqianyl()
 19     {
 20         return  this.dangqianyl;
 21     }
 22     
 23     //加油
 24     public void jiaYou(double youliang)
 25     {
 26         if(youliang<0)
 27         {
 28             System.out.println("不要偷油");
 29         }
 30         else if(this.dangqianyl+ youliang>this.youxiangrl)
 31         {
 32             //本次加油量
 33             double bcyl=this.youxiangrl-this.dangqianyl;
 34             
 35             this.dangqianyl=this.youxiangrl;
 36             
 37             System.out.println("油太多了,已经加满了,这次加了"+bcyl+"升油");
 38         }
 39         else
 40         {
 41             this.dangqianyl+=youliang;
 42             
 43             System.out.println("这次加了"+youliang+"升油");
 44         }
 45         
 46     }
 47 //    private double youhao=;
 48     
 49     private double xingshizlc=0;
 50     
 51     public double getXingshizlc()
 52     {
 53         return this.xingshizlc;
 54     }
 55     
 56     //行驶
 57     public void xingshi(double xingshilc,double youhao)
 58     {
 59         //
 60         if(this.dangqianyl<=0)
 61         {
 62             System.out.println("车没有油,怎么开车");
 63             
 64             return;
 65         }
 66         
 67         if(xingshilc<0||youhao<0)
 68         {
 69             System.out.println("不可能这麽开车");
 70         }
 71         else
 72         {
 73         //油耗
 74         double dangqyh=xingshilc*youhao/100;
 75         
 76         this.dangqianyl-=dangqyh;
 77         
 78         //验证当前油量
 79         //this.dangqianyl=this.dangqianyl>0?this.dangqianyl:0;
 80         
 81         if(this.dangqianyl<0)
 82         {
 83               this.dangqianyl=0;
 84               
 85               System.out.println("你是推着车吗?");
 86         }
 87         
 88         this.xingshizlc+=xingshilc;
 89         
 90         System.out.println("本次行驶了"+xingshilc+"公里");
 91         }
 92     }
 93 
 94     public String getYanse() {
 95         return yanse;
 96     }
 97 
 98     public void setYanse(String yanse) {
 99         this.yanse = yanse;
100     }
101 
102     public String getPinpai() {
103         return pinpai;
104     }
105 
106     public void setPinpai(String pinpai) {
107         this.pinpai = pinpai;
108     }
109 
110     public double getYouxiangrl() {
111         return youxiangrl;
112     }
113 
114     public void setYouxiangrl(double youxiangrl) {
115         this.youxiangrl = youxiangrl;
116     }
117 
118     public Car(String pinpai, double youxiangrl) {
119         super();
120         this.pinpai = pinpai;
121         this.youxiangrl = youxiangrl;
122     }
123     
124     
125     //设计模式---单例模式(单态模式)
126     
127     //静态 static
128     
129     
130     //main方法
131     public static void main(String[] args)
132     {
133         
134         Car myBenchi=new Car("奔驰",50);
135         
136         System.out.println("品牌="+myBenchi.getPinpai());
137         
138         System.out.println("油箱容量="+myBenchi.getYouxiangrl());
139         
140         myBenchi.xingshi(200, 13);
141         
142         myBenchi.jiaYou(30);
143         
144         myBenchi.jiaYou(30);
145         
146         System.out.println("当前油量="+myBenchi.getDangqianyl());
147         
148         myBenchi.xingshi(300, -15);
149         
150         System.out.println("当前油量="+myBenchi.getDangqianyl());
151         
152         myBenchi.xingshi(200, 13);
153         
154         System.out.println("当前总里程="+myBenchi.getXingshizlc());
155         
156         System.out.println("当前油量="+myBenchi.getDangqianyl());
157     }
158     
159 
160 }
Car

 

 技术分享

以上是关于在Java和c#中如果不写访问修饰符,类和类成员默认的是啥访问修饰符?的主要内容,如果未能解决你的问题,请参考以下文章

在开发C#程序过程中,如果定义的类不写访问修饰符,则类默认的访问类型是

Java自学-类和对象 访问修饰符

错题解析

封装与继承

面试题解五 访问修饰符的区别

面向对象编程(OOP)————修饰符