打赏

***JAVA入门到精通-第14讲-final-作业评讲

 
 小猴子继承了大猴子的一些特点;
 但,如果小猴子又想有小鸟飞的能力;鱼游泳的能力;
 因为,JAVA是单继承的;
 通过接口,实现鸟和鱼接口的一些方法;
 
 小猴子继承猴子的特点并且实现鱼的游泳;

 这样,猴子会游泳,会飞;
 通过接口,弥补单继承的一些缺陷;

 
 运行的一瞬间才知道是什么类型-后期绑定;
Car car  后期绑定,编译的时候不知道是什么类型;
 
 前期绑定:在编译的时候就能确定的类型;
 后期绑定:在编译的时候不知道是什么类型,在运行的时候才能确定是什么类型;
 
 用final去修饰不希望被别人修改的变量或者方法;
 
 
 
 a最好赋初值;如果不赋初值,很可能指向空地址;
 程序不够结实;JAVA程序跑的平台可能多种多样的;

 
 保证成员变量、成员方法不被子类修改;
 如果一个变量 是final的,则必须赋初值,否则,无法编译;
 税率必须要用final.
  
 final float  rate_aaa_bbb=3.1415926f;
 
 final 类不能够被继承;
 final修饰类,表示该类不能被继承; 
 
  
  

实现接口VS继承类

java继承是单继承,也就是一个类最多只能有一个父类,这种单继承的机制可保证类的纯洁性,比C++中的多继承机制简洁。但是不可否认,对子类功能的扩展有一定影响。所以:

1实现接口可以看作是对继承的一种补充。(继承是层级式的,不太灵活。修改某个类就会打破继承的平衡,而接口就没有这样的麻烦,因为它只针对实现接口的类才起作用)

2实现接口可在不打破继承关系的前提下,对某个类功能扩展,非常灵活。

 

//实例:建立子类并继承了父类且连接多个接口[Demo126.java]

public class Demo126 {

    public static void main(String[] args) {

        System.out.println("继承了Monkey父类");

        Monkey mo=new Monkey();

        mo.jump();

        LittleMonkey li=new LittleMonkey();

        li.swimming();

        li.fly();

    }

}

//接口Fish

interface Fish{

    public void swimming();

}

//接口Bird

interface Bird{

    public void fly();

}

//建立Monkey

class Monkey{

    int name;

    //猴子可以跳

    public void jump(){

        System.out.println("猴子会跳!");

    }

}

//建立LittleMonkey子类并继承了Monkey父类并连接了FishBird接口

class LittleMonkey extends Monkey implements Fish,Bird{

    public void swimming() {

        System.out.println("连接了Fish接口!");

    }

    public void fly() {

        System.out.println("连接了Bird接口!");

    }

}

-------------------------------------------------------------------------------

用接口实现多态--案例[Demo127.java]

java中多态是个难以理解的概念,但同时又是一个非常重要的概念。java三大特性之一(继承,封装,多态),我们可以从字面上简单理解:就是一种类型的多种状态,以下通过卖小汽车的例子说明什么是多态。

//用接口实现多态

public class Demo127 {

    public static void main(String []args){

        CarShop aShop=new CarShop();

        //卖出一辆宝马

        aShop.sellCar(new BMW());

        //卖出一辆奇瑞QQ

        aShop.sellCar(new CheryQQ());

        //卖出一辆桑塔纳

        aShop.sellCar(new Santana());

        System.out.println("总收入:"+aShop.getMoney());

    }

}

//汽车接口

interface Car{

    //汽车名称

    String getName();

    //获得汽车售价

    int getPrice();

}

//宝马

class BMW implements Car{

    public String getName(){

        return "BMW";

    }

    public int getPrice(){

        return 300000;

    }

}

//奇瑞QQ

class CheryQQ implements Car{

    public String getName(){

        return "CheryQQ";

    }

    public int getPrice(){

        return 20000;

    }

}

//桑塔纳汽车

class Santana implements Car{

    public String getName(){

        return "Santana";

    }

    public int getPrice(){

        return 80000;

    }

}

//汽车出售店

class CarShop{

    //售车收入

    private int money=0;       

    //卖出一部车

    public void sellCar(Car car){

        System.out.println("车型:"+car.getName()+"单价:"+car.getPrice

 

());

        //增加卖出车售价的收入

        money+=car.getPrice();

    }

    //售车总收入

    public int getMoney(){

        return money;

    }

}

运行结果:

车型:BMW 单价:300000

车型:CheryQQ 单价:20000

总收入:320000

 

继承是多态得以实现的基础。从字面上理解,多态就是一种类型(都是Car类型)表现出多种状态(宝马汽车的名称是BMW,售价是300000;奇瑞汽车的名称是CheryQQ,售价是2000)。将一个方法调用同这个方法所属的主体(也就是对象或类)关联起来叫做绑定,分前期绑这下和后期绑定两种。下面解释一下它们的定义:

1、前期绑定:在程序运行之前进行绑定,由编译器和连接程序实现,又叫做静态绑定。比如static方法和final方法,注意,这里也包括private方法,因为它是隐式final的。

2、后期绑定:在运行时根据对象的类型进行绑定,由方法调用机制实现,因此又叫做动态绑定,或者运行时绑定。除了前期绑定外的所有方法都属于后期绑定。

 

多态就是在后期绑定这种机制上实现的。多态给我们带来的好处是消除了类之间的偶合关系,使程序更容易扩展。比如在上例中,新增加一种类型汽车的销售。只需要让新定义的类实现Car类并实现它的所有方法,而无需对原有代码做任何修改,CarShop类的sellCar(Car

car)方法就可以处理新的车型了。

新增代码如下:

java代码

//桑塔纳汽车

class Santana implements Car{

    public String getName(){

        return "Santana";

    }

    public int getPrice(){

        return 80000;

    }

}

-------------------------------------------------------------------------------

java面向对象编程(3)--final

final概念

final中文意思:最后的,最终的。

final可以修饰变量或者方法。

在某些情况下,程序员可能有以下需求:

1、当不希望父类的某个方法被子类覆盖(override)时,可以用final关键字修饰。

2、当不希望类的某个变量的值被修改,可以用final修饰。如果一个变量是final,则必须赋初值,否则编译出错。

3、当不希望类被继承时,可以用final修饰。

//final方法的使用[Demo128.java]

public class Demo128 {

    public static void main(String[] args) {

        Aaa aaa=new Aaa();

        aaa.show();

        Bbb bbb=new Bbb();

        bbb.show();

    }

}

class Aaa{

    int a=0;//如果a不赋初值,a0定义类型后应赋值

    //圆周率不让修改

    //带有final修饰的变量命名时应有_下划线来区分表示。这是java程序员的标准。

    final float reate_1=3.1415926f;//使用final可以保证,需要强制不被修改的数据一定要用final锁定

    //final int b;  //使用final定义变量时一定要赋初值否则报错。

    //b=1;

    final public void sendMes(){//给成员方法用final来修饰则表示不可以被修改,不可被覆盖。

        System.out.println("发送消息");

    }

    public void show(){

        System.out.println("a="+a);

    }

}

final class Bbb extends Aaa{//定义类前加final表示该类不允许被继承

    public Bbb(){

        a++;

        //reate_1=reate+1;

    }

    /*public void sendMes(){

        System.out.println("发送消息")

    }*/

}

 

final--注意事项

1final修饰的变量又叫常量,一般用XX_XX_XX来命名。(带下划线)

2final修饰的变量在定义时,必须赋值,并且以后不能再赋值。

 

final--什么时候用

1、因为案例的考虑,类的某个方法不允许修改。

2、类不会被其它的类继承。

3、某些变量值是固定不变的,比如圆周率3.1415926

 


作业评讲:


手掌游戏机一台X元,mp3一台Y(X,Y,N,M,Z由用户输入)

公司举行抽奖大会,一等奖游戏机N台,二等奖mp3 M台。公司共有Z人。问总价为多少,公司实际平均给每人花费了多少钱。

//计算总费用和平均费用

import java.util.*;//加载包

public class Work06{

    public static int gbGame=0;//静态变量

    public static int gbGameT=0;

    public static int mp3=0;

    public static int mp3T=0;

    public static int people=0;

    public static void main(String []args){

        Scanner myScanner=new Scanner(System.in);//调用键盘输入

        System.out.print("请输入手掌游戏机价格:");

        gbGame=myScanner.nextInt();

        System.out.print("请输入MP3价格:");

        mp3=myScanner.nextInt();

        System.out.print("请输入手掌游戏机数量:");

        gbGameT=myScanner.nextInt();

        System.out.print("请输入MP3数量:");

        mp3T=myScanner.nextInt();

        System.out.print("请输入员工数:");

        people=myScanner.nextInt();

        showInfo();//调用showInfo方法

        }

    public static void showInfo(){ // 建立showInfo方法

        int total=gbGame*gbGameT+mp3*mp3T;//总价

        float average=(float)total/people;//平均价

        System.out.printf("总价: %d,平均价是: %f \n",total,average);

    }

}

**************************************************************


请大家采用面向对象思想设计超级马里奥游戏人物。并能用键盘输入命令,来控制马里奥的位置[Work13.java]


//超级马里奥人物建造及控制台数字操作

import java.util.*;

public class Work13 {

    public static void main(String[] args) {

        Scanner sr=new Scanner(System.in);//接收键盘输入

        System.out.println("输入1-25的数字,你可以移动马里奥,输入其它数字退出");

        int i=sr.nextInt();//将键盘输入数字赋值给i

        Maria m=new Maria();//建立调用Maria构造方法

        for(int a=i;a<=25;a--){

            if(i<25){

                m.move(i);

                i=sr.nextInt();

            }else{

                System.out.println("退出游戏!");

                break;

            }

        }

    }

}

 

class Maria{

    int x,y;

    //构造方法,初始化场景;确定地图,Maria的位置

    public Maria(){

        System.out.println("I'm Maria \n"+"@");

    }

    public void move(int i){

        for(int k=1;k<=25;k++){

            if(k==i){

                System.out.printf("@");

            }else{

                System.out.printf(".");

            }

        }

    }

}


 


 
 

int i=4;

switch(i){

    default;

    System.out.println("default");//执行此语句

case 0:

    System.out.println("zero");//执行此语句

break;

case 1:

System.out.println("one");

case 2:

System.out.println("two");

}

 
 

  1. int i=1;
  2. switch(i){
  3. default:
  4. System.out.println("default");
  5. case 0:
  6. System.out.println("zero");
  7. break;
  8. case 1:
  9. System.out.println("one");//执行此语句
  10. case2:
  11. System.out.println("two");//执行此语句
  12. }

 

 




posted on 2018-11-30 15:00  XuCodeX  阅读(200)  评论(0编辑  收藏  举报

导航