每日加瓦,终成栋房4-final、内部类、权限修饰符

今天份内容:final 权限修饰符 内部类
一、final
1.意思:最终的、不可变的
2.作用:修饰成员变量、修饰方法、修饰符、修饰局部变量
3.特点:final修饰基础数据类型的值的时候是不可改变的,修饰引用数据类型的时候地址值是不可改变的,可以改变了内容。
注:final修饰的值只能定义一次,都不可改变了

二、权限修饰符:
1.分类:public protected default private
2.权限区别:

权限同类中同包中不同包子类不同包非子类
publictruetruetruetrue
protectedtruetruetruefalse
defaulttruetruefalsefalse
privatetruefalsefalsefalse

三、内部类
分类:成员内部类、局部内部类、匿名内部类
格式:class {}
成员内部类:在类里面定义了类的叫成员内部类,内部类可以随意访问外部类,而内部类需要new一个对象才可以访问内部类
局部内部类:在方法里面定义的类,叫局部内部类,“局部”说明这个类只能在方法里面使用,出去了就用不了了。
匿名内部类:当接口的使用只需要实现一次时,可以使用匿名内部类,可以减少实现类的书写,
格式:new 接口名称{};
注意:要以分号结尾,不写会报错
匿名内部类在创建的时候只能使用唯一的一次,
匿名内部类在调用方法的时候也只能调用一次,
若希望使用多次,可以声明一个变量来传递使用,
省略了一个实现类的书写
匿名对象和匿名内部类是由区别的,前者省略对象,后者省略实现类,自己重写使用一次的接口内的方法,

四、昨日习鷈解答:
1.利用接口做参数,写个计算器,能完成加减乘除运算。
(1)定义一个接口Compute含有一个方法int computer(int n, int m)。
(2)设计四个类分别实现此接口,完成加减乘除运算。
(3)设计一个类UseCompute,类中含有方法:public void useCom(Compute com, int one, int two),此方法能够用传递过来的对象调用computer方法完成运算,并输出运算的结果。
(4)设计一个主类Test,调用UseCompute中的方法useCom来完成加减乘除运算。
此题注意他们的useCom的使用****
关键代码如下:
public interface Opteration {
int compute(int m, int n);
}
重写四个方法(加减乘除,此处拿其一为表示,其他类似,注意减法除数不能为0)
public class Add implements Opteration {
@Override
public int compute(int m, int n) {
return n + m;
}
}
实现运算类:
public void compute(Opteration com, int one, int two) {
System.out.println(com.compute(one,two));
}
测试类:
public static void main(String[] args) {
Add a = new Add();
Sub s = new Sub();
Mlu m = new Mlu();
Div d = new Div();
Cal c = new Cal();
System.out.println(“请输入第一个数:”);
Scanner sc1 = new Scanner(System.in);
int x = sc1.nextInt();
System.out.println(“请输入第二个数:”);
Scanner sc2 = new Scanner(System.in);
int y = sc2.nextInt();
System.out.println(“请输入+、-、、/:");
Scanner sc3 = new Scanner(System.in);
String js = sc3.next();
while (true){
if(js.equals("+")){
System.out.println(“加法运算结果:”);
c.compute(a,x,y);
break;
}else if(js.equals("-")){
System.out.println(“减法运算结果:”);
c.compute(s,x,y);
break;
}else if(js.equals("
”)){
System.out.println(“乘法运算结果:”);
c.compute(m,x,y);
break;
}else if(js.equals("/")){
System.out.println(“除法运算结果:”);
c.compute(d,x,y);
break;
}else {
System.out.println(“非法输入”);
break;
}
}
}
2.按如下要求编写Java程序:
(1)定义接口A,里面包含值为3.14的常量PI和抽象方法double area()。
(2)定义接口B,里面包含抽象方法void setColor(String c)。
(3)定义接口C,该接口继承了接口A和B,里面包含抽象方法void volume()。
(4)定义圆柱体类Cylinder实现接口C,该类中包含三个成员变量:底圆半径radius、 圆柱体的高height、颜色color。
(5)创建主类来测试 类Cylinder。
关键代码:
public interface InterfaceA {
double p = Math.PI;
double area();
}
public interface InterfaceB {
void setColor(String c);
}
public interface InterfaceC extends InterfaceA,InterfaceB {
void volume();
}
public class Cylinder implements InterfaceC {
double radios,height;
String color;
@Override
public void volume() {
System.out.println(pradiosradiosheight);
}
@Override
public double area() {
System.out.println(p
radios*radios);
return 0;
}
@Override
public void setColor(String c) {
System.out.println(“blue”);
}
测试类:
public static void main(String[] args) {
Cylinder c = new Cylinder();
c.radios=2;
c.height=2;
c.volume();
c.area();
}
附加题:实现群主发红包程序,群主发红包,成员抢红包,
思路:首先确定群主和钱这两个变量,其次用ArrayList集合实现把一个数拆分为一个数组,也就是把一个红包分为很多份,让成员抢。成员抢红包,随机抢到一个数值的红包,存到集合内,输数即可,实现类就是调用他们别分的发红包和抢红包的功能
关键代码如下:
String name;
int Monty;
public Student(){}
public Student(String name, int monty) {
this.name = name;
Monty = monty;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonty() {
return Monty;
}
public void setMonty(int monty) {
Monty = monty;
}
@Override
public String toString() {
return “Student{” +
“name=’” + name + ‘’’ +
“, Monty=” + Monty +
‘}’;
}
public void show(){
System.out.println("名称: "+name + " " + "余额: " + Monty);
}
群主:
public QunZhu() {}
public QunZhu(String name, int monty) {
super(name, monty);
}
// 定义发红包的方法
public ArrayList Send(int totalMonty, int count) {
ArrayList list = new ArrayList();
int m = super.getMonty();
if( m < totalMonty){
System.out.println(“余额不足”);
return null;
}
setMonty(m - totalMonty);
int avg = totalMonty / count;
int mod = totalMonty % count;
for (int i = 0; i < count - 1; i++) {
list.add(avg);
}
int last = mod+avg;
list.add(last);
return list;
}
成员:
public ChengYuan() {}
public ChengYuan(String name, int monty) {
super(name, monty);
}
public void Receive(ArrayList list){
Random r = new Random();
int index = r.nextInt(list.size());
int m = list.remove(index);
int det = super.getMonty();
setMonty(m+det);
}
测试:
QunZhu qz = new QunZhu(“群主”,100);
ChengYuan cy1 = new ChengYuan(“tt”,10);
ChengYuan cy2 = new ChengYuan(“rr”,12);
ChengYuan cy3 = new ChengYuan(“ee”,18);
ArrayList li = qz.Send(100,3);
cy1.Receive(li);
cy2.Receive(li);
cy3.Receive(li);
qz.show();
cy1.show();
cy2.show();
cy3.show();
五、今日题库
实现一个亚瑟发技能的过程;亚瑟打出了技能天降正义技能发动结束,亚瑟打出了普攻技能发动结束,(实现方法:接口+匿名内部类)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值