修饰符,类属性,类方法

1-

成员变量有四种修饰符 

private 私有的 
package/friendly/default 不写 
protected 受保护的 

public 公共的

类和类之间的关系有如下几种:

以Hero为例


自身:指的是Hero自己
同包子类:ADHero这个类是Hero的子类,并且和Hero处于同一个包下
不同包子类:Support这个类是Hero的子类,但是在另一个包下
同包类: GiantDragon 这个类和Hero是同一个包,但是彼此没有继承关系

其他类:Item这个类,在不同包,也没有继承关系的类 

那么什么情况该用什么修饰符呢?
从作用域来看,public能够使用所有的情况。 但是大家在工作的时候,又不会真正全部都使用public,那么到底什么情况该用什么修饰符呢?

1. 属性通常使用private封装起来//属性自己拥有即可,继承一个类自动有了他的方法他的属性
2. 方法一般使用public用于被调用//方法大家都会调用
3. 会被子类继承的方法,通常使用protected//相关类可以继承使用调用,而无关系的类则不可

4. package用的不多,一般新手会用package,因为还不知道有修饰符这个东西

再就是作用范围最小原则

简单说,能用private就用private,不行就放大一级,用package,再不行就用protected,最后用public。 这样就能把数据尽量的封装起来,没有必要露出来的,就不用露出来


2-

类属性,即是关于这个class所通用的

当一个属性被static修饰的时候,就叫做类属性,又叫做静态属性 

当一个属性被声明成类属性,那么所有的对象,都共享一个值 

比如不同英雄名字血量不同,这是针对类Hero里不同对象,比如盖伦,提莫的对象属性

而他们的版权都是拳头爸爸的,这就是类属性

package charactor;
 
public class Hero {
    public String name; //实例属性,对象属性,非静态属性
    protected float hp;
    static String copyright;//类属性,静态属性
     
    public static void main(String[] args) {
           Hero garen =  new Hero();
           garen.name = "盖伦";
            
           Hero.copyright = "版权由Riot Games公司所有";
            
           System.out.println(garen.name);
           System.out.println(garen.copyright);
            
           Hero teemo =  new Hero();
           teemo.name = "提莫";
           System.out.println(teemo.name);    
           System.out.println(teemo.copyright);
         
    }
     
}

一般用Hero.copyright来访问类属性,因为更符合关于类的属性

有点全局变量的意思

3-前面说的类里面有不同的对象,有对象方法,类似于对象属性,对应于类属性

对象方法,也存在类方法

不同在于,对象方法需要具体的对象来调用

类方法可以直接通过类调用

另外,对象方法需要对象,实例化则带有实例化的属性

所以当方法中要用的具体属性则设计为对象方法

不需要具体属性,只是作为功能性方法则加入static设计为类方法

public static void printGameDuration(){
System.out.println("已经玩了10分50秒");
}

package charactor;
 
public class Hero {
    public String name;
    protected float hp;
 
    //实例方法,对象方法,非静态方法
    //必须有对象才能够调用
    public void die(){
        hp = 0;
    }
     
    //类方法,静态方法
    //通过类就可以直接调用
    public static void battleWin(){
        System.out.println("battle win");
    }
     
    public static void main(String[] args) {
           Hero garen =  new Hero();
           garen.name = "盖伦";
           //必须有一个对象才能调用
           garen.die();
            
           Hero teemo =  new Hero();
           teemo.name = "提莫";
            
           //无需对象,直接通过类调用
           Hero.battleWin();
         
    }
}
表面上来看,类方法和类属性相对于对象,名字上加入了static调用时可以通过类的名字不需要具体对象就可以对象



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值