为了账号安全,请及时绑定邮箱和手机立即绑定

Java入门第二季

小慕 JAVA开发工程师
难度入门
时长 4小时 0分
学习人数
综合评分9.57
2068人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.4 逻辑清晰
  • 封装就好比生活中的抽奖箱,如果没有抽奖箱的存在,所有的抽奖号码球都在地上摆着的话,用户就会加以挑选和改动,不能实现抽奖的目的。加了封装就是把所有的号码球都装进了这个抽奖箱,然后给用户一个规定,必须通过入口去取得号码球,而且一次只能取一个。这样一来用户便不能破换抽奖流程,从而达到抽奖的目的。
  • 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。<br> 需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。<br> 创建对象的时候就会加载类,就会出现任务结果的前三行。 <br> 程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
  • /*方法的多态*/ /**********************分别有父类【类A】(含有方法a输出a1),子类【类B】含有同名方法a输出a2,和方法b输出b1,子类【类C】**********************/ 类A 对象1 = new 类A();/*创建一个属于类A的对象1,引用指向类A*/ 类A 对象2 = new 类B();/*创建一个属于类B的对象2,引用指向类A*/ 类A 对象3 = new 类C();/*创建一个属于类C的对象3,引用指向类C*/ 对象1 方法a();/*输出a1,引用方法就是指向的类A本来拥有的方法,而对象1属于类A*/ 对象2 方法a();/*输出a2,引用方法就是指向的类A本来拥有的方法,但是它的子类B拥有和它同名的方法而功能又重写了,而对象2属于类B*/ 对象3 方法a();/*输出a1,引用方法就是指向的类A本来拥有的方法,而对象3属于类C,类C就是继承了类A中的方法功能,两者是继承关系,对象3虽然属于类C但是它衔接了类A的功能,所以编号是A_C3*/ 对象2 方法b();/*输出失败,因为对象2的引用功能是属于类A虽然它属于类B,但是方法b是类B中特有的,所以如果要输出的话,就需要创建一个既属于类B,引用又指向类B的对象4{类B 对象4 = new 类B }然后用{对象4 方法b();}才能够输出b2*/
    08:13
    看视频
  • 为什么我直接System.out.println(className);就行了啊?
  • 重写: a,父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。 b,若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。 c,子类函数的访问修饰权限不能少于父类的;
  • 一个类与另一个类的边界如何划分?举个例子来说,手机与平板的边界在哪里?为什么将手机可以称之为手机,而将平板称之为平板?假如答案是通过属性和方法,那么假如平板一样具有打电话和发短信的功能,或者有一天打电话和发短信的功能被这个社会淘汰掉了(事实证明如果不是跟座机连线,这两个功能已经并不是像原来那么必要了),他们之间的差别(边界)还存在吗?
    07:31
    看视频
  • 租车系统实现代码7-5 else if(selectedcar instanceof PassengerCar){ passengerCarName +=" "+selectedcar.name; /* * 给记录总载客量的变量加上选中客车的载客量,通过强制类型转换可以让父类访问子类, * 因为我们初始化时,这个位置存放的就是PassengerCar类对象,所有是安全的 */ personCapicity +=((PassengerCar)selectedcar).passengerCapacity; //给记录总金额的变量加上选中租用皮卡车所客车的金额 money += ((PassengerCar)selectedcar).transport(hireDay,((PassengerCar)selectedcar).rent); } } if(personCapicity != 0){ //显示账单中的客车信息 System.out.println("***可载人的车有:"); System.out.println(passengerCarName+" "+"共载人:"+personCapicity+"人"); } if(goodsCapicity != 0){ //显示账单中的货车信息 System.out.println("***可载货的车有:"); System.out.println(GoodsCarName+" "+"共载货:"+goodsCapicity+"吨"); } if(money !=0){ //显示账单中的金额信息 System.out.println("***租车总价格:"+money+"元"); } } }
  • 继承的初始化顺序: 1.初始化父类再初始化子类。 2.先执行初始化对象中的属性,再执行构造方法中的初始化。 父类对象-->属性初始化--->构造方法 子类对象-->属性初始化--->构造方法
    04:41
    看视频
  • 滴滴租车代码,应该算是比较简便了的(有每一步的说明),希望对你们有帮助

    package lx3;


    import java.util.Scanner;


    //汽车类

     class qc{


    private String qcmc;

    private int zhujin;

    private int rongli;

    private int dun;

    public qc(){

    }

    public qc(String qcmc,int zhujin,int rongli,int dun){

    this.qcmc=qcmc;

    this.zhujin=zhujin;

    this.rongli=rongli;

    this.dun=dun;

    }


    public String getqcmc(){

    return qcmc;

    }

    public int getzhujin() {

    return zhujin;

    }

    public int getrongli() {

    return rongli;

    }

    public int getdun(){

    return dun;

    }

     }

    //第一辆车的类

    class yiqc extends qc{

    public yiqc(){

    }

    public yiqc(String qcmc,int zhujin,int rongli,int dun){

    super(qcmc,zhujin,rongli,dun);

    }

    }

    //第二辆车

    class erqc extends qc{

    public erqc(){

    }

    public erqc(String qcmc,int zhujin,int rongli,int dun){

    super(qcmc,zhujin,rongli,dun);

    }

    }

    //第三辆车

    class sanqc extends qc{

    public sanqc(){

    }

    public sanqc(String qcmc,int zhujin,int rongli,int dun){

    super(qcmc,zhujin,rongli,dun);

    }

    }

    //第四辆车

    class siqc extends qc{

    public siqc(){

    }

    public siqc(String qcmc,int zhujin,int rongli,int dun){

    super(qcmc,zhujin,rongli,dun);

    }

    }

    //第五辆车

    class wuqc extends qc{

    public wuqc(){

    }

    public wuqc(String qcmc,int zhujin,int rongli,int dun){

    super(qcmc,zhujin,rongli,dun);

    }

    }

    //第六辆车

    class luqc extends qc{

    public luqc(){

    }

    public luqc(String qcmc,int zhujin,int rongli,int dun){

    super(qcmc,zhujin,rongli,dun);

    }

    }


    public class dididache {


    public static void main(String[] args) {

    // TODO Auto-generated method stub

    System.out.println("您是否要租车:1是    0否");

    //输入1或0

    Scanner sc=new Scanner(System.in);

    int i=sc.nextInt();

    //判断输入的是1还是0

    if(i==0) {

    System.out.println("感谢你的访问,欢迎下次再来");

    }else if(i==1) {

    System.out.println("你可租车的类型及其价目表");

    //用数组创建多个对象和用多态的引用可以指向子类的知识

    qc[] r1= {new yiqc("宝马",500,4,0),new erqc("奔驰",400,4,0),new sanqc("法拉利",450,4,2),new siqc("保时捷",800,20,0),new wuqc("兰博基尼",400,0,4),new luqc("麦凯轮",1000,0,20)};

    //用for循环输出租车价目表

    System.out.println("序号                汽车名称              租金          容量");

    for(int j=0;j<=5;j++) {

    System.out.println(j+1+"\t"+ r1[j].getqcmc()+"\t"+r1[j].getzhujin()+"\t"+"载人"+r1[j].getrongli()+" "+"载货"+r1[j].getdun()+"吨");

    }

    //输入汽车的数量

    System.out.println("请输入您要租汽车的数量");

    Scanner sc1=new Scanner(System.in);

    int x=sc1.nextInt();

    //定义一个数组用来储存选车的序号,数组的长度由租车的数量来决定

    //用for循环输出选择的车序号

    int[] sl=new int[x];

    for(int j=1;j<=sl.length;j++) 

    {

    System.out.println("请输入第"+j+"辆车的序号");

    Scanner sc2=new Scanner(System.in);

    int x1=sc2.nextInt();

    sl[j-1]=x1;

    }

    //输出租车的天数

    System.out.println("请输入您要租的天数");

    Scanner sc2=new Scanner(System.in);

    int y=sc2.nextInt();

    //计算账单

    System.out.println("您的账单");

    int num=0;

    for(int z=0;z<sl.length;z++) {

    num+=r1[sl[z]-1].getzhujin(); //sl[z]表示sl数组中的选的车序号

     //sl[z]-1表示车序号-1;因为车序号是1-6,而sl数组下标要0-5.

    //输出账单

    System.out.println("你一共需要支付:"+(num*y));  //y是租的天数

    }

      }


    }


  • //测试类
    package jjj;
    import java.util.Scanner;
    public class Initail {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println("欢迎使用哒哒租车系统");
            System.out.println("您是否要租车:1是 0否");
            Car[] allcar= {new PassengerCar("奥迪A4", 800, 4),new PassengerCar("大金龙", 500, 20),new Trunk("东风", 800, 20),new Trunk("解放",500, 10),new Pickup("皮卡", 800, 4,5)};
           Scanner input =new Scanner(System.in);
           int choice1=input.nextInt();
           if(choice1==1) {
               System.out.println("您可租的汽车及其报价表:");
               System.out.println("号\t汽车名称\t租金\t容量\t");
               for(int i=0;i< allcar.length;i++) {
                   System.out.println((i+1)+"\t"+allcar[i].toString());
               }
           }
           else if(choice1 != 1){
    
                System.out.println("感谢你的使用");
    
            }
           System.out.println("请输入需要租车的数量:");
           int choice2=input.nextInt();
           if(choice2<1) {
               System.out.println("数量有错,请重新输入");
               choice2=input.nextInt();
           }
           Car[] newcar = new Car[choice2];
           double bills =0;
           double zhuo =0;
           int zren =0;
           for(int i = 0; i < choice2; i++){
    
                System.out.println("请输入第"+ (i+1) + "辆车的序号");
    
                int choice3 = input.nextInt();
    
                if(choice3 > 5 || choice3 < 1){
    
                    System.out.println("目标不存在,请重新输入");
    
                    choice3 = input.nextInt();
    
                }
                newcar[i] = allcar[choice3 - 1];
           }
           
            System.out.println("请输入你要租的天数");
    
            int day = input.nextInt();
            for(int i = 0; i < choice2; i++){
    
                bills = newcar[i].getRent() * day + bills;
    
            }
            System.out.println("您的账单信息:");
            
            System.out.println("***可以载人的车有:");
            for(int i=0;i<choice2;i++) {
                if(newcar[i].getManned()!=0) {
                    System.out.print(newcar[i].getName()+"\t");
                    zren=zren+newcar[i].getManned();
                }
            }
            if( zren==0) System.out.println("无");
            else System.out.println("总载客人数:" + zren + "人");
            
            System.out.println("***可以载货的车有:");
    
            for(int i = 0; i < choice2; i++){
    
                if(newcar[i].getCargo() != 0 ){
    
                    System.out.print(newcar[i].getName()+"\t");
    
                    zhuo += newcar[i].getCargo();
    
                }
            }
            if(zhuo==0) System.out.println("无!");
            else System.out.println("总载货数:" + zhuo + "吨");
            
            System.out.println("总金额:"+ bills);
        }
    }
    
    //Car父类
    package jjj;
    
    public abstract class Car {
        private String name;
        private int rent;
        private int manned;
        private double cargo;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getRent() {
            return rent;
        }
        public void setRent(int rent) {
            this.rent = rent;
        }
        public int getManned() {
            return manned;
        }
        public void setManned(int manned) {
            this.manned = manned;
        }
        public double getCargo() {
            return cargo;
        }
        public void setCargo(double cargo) {
            this.cargo = cargo;
        }
        
    }
    
    //子类
    public class PassengerCar extends Car {
        public PassengerCar(String name,int rent,int manned) {
            this.setName(name);
            this.setRent(rent);
            this.setManned(manned);
        }
        public String toString() {
            return this.getName()+"\t"+this.getRent()+"/天 "+"\t"+"载人:"+this.getManned()+"\t";
        }
    }
    package jjj;
    
    public class Pickup extends Car {
        public Pickup(String name,int rent,int manned,double cargo) {
            this.setName(name);
            this.setRent(rent);
            this.setManned(manned);
            this.setCargo(cargo);
        }
        public String toString() {
            return this.getName()+"\t"+this.getRent()+"/天 "+"\t"+"载人:"+this.getManned()+" 载货:"+this.getCargo()+"吨"+"\t";
        }
    }
    
    package jjj;
    
    public class Trunk extends Car {
        public Trunk(String name,int rent,int cargo) {
            this.setName(name);
            this.setRent(rent);
            this.setCargo(cargo);
        }
        public String toString() {
            return this.getName()+"\t"+this.getRent()+"/天 "+"\t"+"载货:"+this.getCargo()+"\t";
        }
    }


  • 1,static 出现的原因: 类对象拥有的资源是属于自己的是独立的、是不能被共享的。因为在程序中需要共享资源。 所以出现了静态变量。 2,静态变量的用法 1)通过类名直接引用:HelloWorld.var 2)通过对象访问:HelloWorld world=new HelloWorld(); world.var; 结:最好通过类名访问静态变量。 下面归纳一下java用于控制可见性的4个访问修饰词: 1)仅对本类可见--private 2)对所有的类可见--public 3)对本包和所有子类可见--protected 4)对本包可见---默认,不需要修饰词
  • 构造方法 1.使用new+构造方法 创建一个新的对象 2.构造方法是定义在Java类中的一个用来初始化对象的方法 构造方法与类同名且没有返回值 public 构造方法名(){//没有返回值类型;与类名相同;可以指定参数 //初始化代码 } 3.无参的构造方法使用 main(); Telphone phone = new Telphone(); class Telphone: public Telphone(){ System.out.println("Telphone构造方法执行了"); } 4.有参的构造方法 main(): Telphone phone2 = new Telphone(4.0f, 2.0f, 2.0f); class Telphone: public Telphone(float newScreen, float newCpu, float newMem){ screen = newScreen; cpu = newCpu; mem =newMem; } 5.当没有指定构造方法时,系统会自动添加无参的构造方法 6.当有指定构造方法,无论是有参、无参的构造方法,都不会自动添加无参的构造方法 7.构造方法的重载:方法名相同,但参数不同的多个方法调用时会自动根据不同的 参数选择相应的方法 8.构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值
  • 4-3练习第二部分 package com.imooc; import java.util.Scanner; public class Circle extends Shape { final double PI = 3.1415926; Scanner input = new Scanner(System.in);//创建一个Scanner类 @Override public void perimeter() { System.out.println("请输入圆形的半径:"); double radius = input.nextDouble(); double thePrimeter = 2*PI*radius; System.out.println("圆形的周长为:"+thePrimeter); } @Override public void area() { System.out.println("请输入圆形的半径:"); double radius = input.nextDouble(); double theArea = PI*radius*radius; System.out.println("圆形的面积为:"+theArea); } }
  • 接口方法中不能有方法体,而且接口的访问修饰符不能是private 和protected
  • JAVA中的继承:<br> 1.继承概念:类与类的关系 动物->狗 ==> 父类 ->子类<br> 注意:每个类只能有一个父类!<br> 2.继承的好处:子类拥有父类属性和方法(代码复用)<br> 注意:private修饰的父类属性和方法不能被继承!<br> 3.语法规则:<br> class 子类 extends 父类<br> 例: class Dog extends Animal{<br> ......<br> }<br> 4.代码演示

举报

0/150
提交
取消
课程须知
本课程是Java开发的基础,需要大家:掌握 Java 基本语法的使用。如果您是新手,建议先移步 《Java入门第一季》
老师告诉你能学到什么?
• 掌握 Java 基本语法和编程思路 • 熟练运用面向对象程序设计思想

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!