1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > static+代码块+静态常量+访问权限修饰符总结+匿名内部类+案例

static+代码块+静态常量+访问权限修饰符总结+匿名内部类+案例

时间:2021-06-21 06:43:49

相关推荐

static+代码块+静态常量+访问权限修饰符总结+匿名内部类+案例

static+代码块+静态常量+访问权限修饰符总结+匿名内部类+案例

static以及代码块静态常量访问权限修饰符和总结匿名内部类案例

static

代码块

成员代码块

类名{//成员代码块{主体;}}

创建对象时执行一次,创建一次执行一次。

创建子类对象时执行一次。

静态代码块:

类名{//代码块static{主体;}}

加载时,静态代码块会执行 类只加载一次,所以静态代码块只执行一次

创建类的对象时

访问静态成员变量

访问静态成员方法

创建子类对象时

静态代码块 > 成员代码块 > 构造方法

静态常量

public static final pi = 3.1415926535;访问:类名.pi;

访问权限修饰符

private和abstract不能一起使用修饰方法?

private修饰的方法不能被重写,abstract必须要重写

final和abstract能一起使用吗?

不可以。 final修饰的类 子类不能继承 abstract修饰的类要求子类必须继承

​ final修饰的方法 子类不能重写 abstract修饰的方法 子类必须重写!

static和abstract能一起使用吗?

都可以修饰方法 但是static修饰的方法 类名可以访问 但是abstract修饰的方法没有方法体,不能直接被调用。

static和final可以一起使用吗?

可以 静态常量

内部类

在内部定义的类就是内部类

匿名内部类(重要)

两件事

1.定义了一个类的子类

2.同时创建了这个子类对象

作用:创建一个类子类对象的快捷方式

格式 new 父类/接口(){重写方法};

例如有一个定义好的类Fly

public class Fly {public void fly(){}}

测试类

public class Test {public static void main(String[] args) {//使用匿名内部类创建Fly对象Fly f = new Fly(){//此时new好的类相当于Fly类的子类。@Overridepublic void fly(){//重写了父类的方法System.out.println("lalal");}};f.fly();//多态的表现------------- --------------- -- -- - ---- ------------------------------------------//也可以直接调用 new Fly(){@Overridepublic void fly(){System.out.println("我我我");}}.fly();

上面的开始的Fly类也可以定义成抽象类或者接口都是一样的。

public interface Run {void run();}main(){Run r = new Run(){@Overridepublic void run() {System.out.println("跑跑跑");}};r.run();}

匿名内部类作为方法的实际参数和方法的返回值类型

public interface Fly {public abstract void fly();}

方法的参数是接口,只能传递实现类对象。

public static void method(Fly f){f.fly();}

方法的返回值类型是接口,只能返回实现类对象。

public static Fly method(){return new Fly() {@Overridepublic void fly() {System.out.println("鸟儿飞了");}};}

主类

public class Test {public static void main(String[] args) {//调用 传递参数是接口 的方法method(new Fly() {@Overridepublic void fly() {System.out.println("鸟飞了");}});//或者Fly f = new Fly() {@Overridepublic void fly() {}};method(f);//调用 返回值类型是接口 的方法,只能返回实现类对象Fly f2 = method();f2.fly();} }

案例

公司类

​ 属性

​ 总资产属性

​ 所有员工属性

​ 方法

​ 发工资方法:从总资产中减去所有员工支出。

员工类:

​ 属性

​ 姓名

​ 工号

​ 存款

​ 工资

经理、厨师、服务员均为员工子类。经理在员工基础上添加奖金属性。发完工资后,请查看所有员工的存款情况.

公司类加入调整员工工资方法:

返回值为void

参数为:被调整工资的员工与调整金额

​ 方法体逻辑为,在员工工资的基础上调整相应的金额

公司类添加评选幸运员工方法(随机抽取一名员工并返回)。

公司类添加开party方法,要求只能让厨师和服务员进来,其他员工都不能来。

答案

先实现员工类,很常规,定义私有成员,构造方法还有get set方法。

public class YuanGong {private String name;private String id;private double cunKuan;private double gongZi;//空参构造public YuanGong() {}//带参构造public YuanGong(String name, String id, double cunKuan, double gongZi) {this.name = name;this.id = id;this.cunKuan = cunKuan;this.gongZi = gongZi;}//get、set方法public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public double getCunKuan() {return cunKuan;}public void setCunKuan(double cunKuan) {this.cunKuan = cunKuan;}public double getGongZi() {return gongZi;}public void setGongZi(double gongZi) {this.gongZi = gongZi;}}

定义一个接口,定义抽象的服务的方法供其他类使用。

public interface Service {public abstract void service();}

再定义经理类继承员工类,额外加一个私有成员奖金,构造方法,get、set方法。

public class JingLi extends YuanGong{private double jiangJin;public JingLi() {}public JingLi(String name, String id, double cunKuan, double gongZi, double jiangJin) {super(name, id, cunKuan, gongZi);this.jiangJin = jiangJin;}public double getJiangJin() {return jiangJin;}public void setJiangJin(double jiangJin) {this.jiangJin = jiangJin;}}

再定义厨师类继承员工类,没有特殊成员直接写构造方法就好,他要实现那个服务类。

public class ChuShi extends YuanGong implements Service{public ChuShi(String name, String id, double cunKuan, double gongZi) {super(name, id, cunKuan, gongZi);}public ChuShi() {}@Overridepublic void service() {System.out.println("厨师来了,炒菜");}}

再定义服务员类继承员工类,没有特殊成员直接写构造方法就好,他要实现那个服务类。

public class FuWuYuan extends YuanGong implements Service{public FuWuYuan() {}public FuWuYuan(String name, String id, double cunKuan, double gongZi) {super(name, id, cunKuan, gongZi);}@Overridepublic void service() {System.out.println("服务员来了服务");}}

定义公司类

两个成员变量:总工资和员工集合

定义构造方法

定义get set方法

定义展示工资方法

定义发工资方法

定义调整工资方法

定义开宴会方法

定义抽取幸运观众方法

import java.util.ArrayList;import java.util.Random;public class GongSi {//成员变量private double zongZiChan;private ArrayList<YuanGong> list;//开宴会,厨师和服务员可以过来服务。public void party(Service s){s.service();}//调整工资的方法public void updateGongZi(YuanGong yg, double money){yg.setGongZi(yg.getGongZi()+money);}//抽取幸运观众public YuanGong lucky(){Random r = new Random();int index = r.nextInt(list.size());return list.get(index);}//发工资public void faGongZi(){for (int i = 0; i < list.size(); i++) {YuanGong yg = list.get(i);//员工存款 = 原来的存款+工资yg.setCunKuan(yg.getGongZi() + yg.getCunKuan());zongZiChan -= yg.getGongZi();//如果是经理还要发加奖金if(yg instanceof JingLi){//向下转型JingLi jl = (JingLi) yg;zongZiChan -= jl.getJiangJin();//经理存款 = 原来的存款+奖金,工资已经加过了。jl.setCunKuan(jl.getCunKuan()+jl.getJiangJin());}}}//展示工资public void show(){System.out.println("总资产:"+zongZiChan);//展示所有员工的信息for (int i = 0; i < list.size(); i++) {YuanGong yg = list.get(i);System.out.println("姓名:"+yg.getName());System.out.println("员工工号:"+yg.getId());System.out.println("存款:"+yg.getCunKuan());System.out.println("工资:"+yg.getGongZi());//如果是经理另外打印奖金,if(yg instanceof JingLi){//向下转型JingLi jl = (JingLi) yg;System.out.println("奖金:"+jl.getJiangJin());}System.out.println("----------------------------------");}}//构造方法public GongSi(double zongZiChan, ArrayList<YuanGong> list) {this.zongZiChan = zongZiChan;this.list = list;}public GongSi() {}public double getZongZiChan() {return zongZiChan;}//get、set方法public void setZongZiChan(double zongZiChan) {this.zongZiChan = zongZiChan;}public ArrayList<YuanGong> getList() {return list;}public void setList(ArrayList<YuanGong> list) {this.list = list;}}

定义测试类

import java.util.ArrayList;public class Test {public static void main(String[] args) {double zongZiChan = 1000000.0;//创建员工集合ArrayList<YuanGong> list = new ArrayList<>();list.add(new JingLi("柳岩","001",10000,20000,200));list.add(new FuWuYuan("金莲","002",0,250));list.add(new ChuShi("唐嫣","003",10000,20000));//为公司传入参数GongSi gongSi = new GongSi(zongZiChan, list);gongSi.show();gongSi.faGongZi();//发工资了System.out.println("------------------------------");gongSi.show();//发完展示一下gongSi.updateGongZi(list.get(1),20);//提高一下金莲的工资System.out.println(list.get(1).getGongZi());YuanGong g = gongSi.lucky();//抽取幸运员工System.out.println(g.getName());System.out.println("---------");//开party测试JingLi jl = (JingLi)list.get(0);FuWuYuan fwy = (FuWuYuan) list.get(1);ChuShi cs = (ChuShi) list.get(2);gongSi.party(fwy);gongSi.party(cs);}}

Object类中的toString方法

将对象转换为字符串 对象的数据类型 + @ + 地址值(哈希值)在Object类中 或者 子类不重写 打印的是地址值而一般情况 子类都会对这个方法进行重写 返回 属性内容

定义一个person类对继承的toString()方法重写

public class Person {private String name;private int age;//自动生成@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}public Person(String name, int age) {this.name = name;this.age = age;}}main(){Person p = new Person("柳岩",38);System.out.println(p);System.out.println(p.toString());}打印结果Person{name='柳岩', age=38}Person{name='柳岩', age=38}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。