初学java新世界(2)

前情提要

摆烂好久,今天老师说要学好Java和数据库,我!卷土重来!

重开个笔记,承接一下上一个笔记,到类的构造和置取,说了一下this

~面向对象有三大特征,封装,继承和多态。封装是通过方法访问内部信息。具体的实现细节没有必要显示,类的一些属性可以通过置取方法来显示。数据完整性安全性,类的封装性和独立性

~置取方法:性别属性

~参数传递:基本类型传递变量的值,引用类型传递引用地址。值传递java

~数据类型在这里插入图片描述

//第九章的小例子:设计一个方法getDistance()求两点间距离
public class e1{
    private double x;
    private double y;
    public e1(double x,double y)
    {
        this.x=x;
        this.y=y;
    }
    public void setX(double x)
    {
      this.x=x;
    }
    public void setY(double y)
    {
        this.y=y;
    }

    public double getDistance (e1 p)
    {
        return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
    }
    public static void main(String[]args)
    {
        e1 p1=new e1(0,0);
        e1 p2=new e1(3,4);
        System.out.println(p1.getDistance(p2));
        p2.setX(6);
        p2.setY(8);
        System.out.println(p1.getDistance(p2));
    }

}
/*5.0

10.0*/

之前的搞的有点乱,还是按章节来梳理,第十章开始。

第十章:类的组合关系

类间关系:关联关系,依赖关系和泛化关系。这里讲关联关系中的类的组合。

最常见形式:一个类作为另一个类的属性。提高代码复用性,一致性

举一个题目说明:

一辆Car有(has)四个轮子(Wheels)和一个发动机(Engine)。现在要求用组合方法设计类Car、类Wheel和类Engine.

(1) 类Engine

(2)类Wheel

(3)类Car

(4)类Test

这四个类都装在一个包f2中 

package f2;
/*有字符串属性model记录轿车的型号,
有属性wheels[]和engine,
分别是Wheel类对象数组和Engine类对象
有构造方法,参数是三个字符串,分别表示轿车的型号、轮胎型号和发动机的型号,
有方法changeWheel()可以改变指定轮胎的型号,
有方法start(),先输出下面样例中包含轿车型号和“firing”的字符串,然后调用engine的start(),再调用所有轮胎的roll(),最后显示轿车型号和“running”。
*/
class car {
    String model;
    Wheel[] Wheels = new Wheel[4];//实例化数组
    Engine engine=new Engine();//实例化Engine

    public car(String model, String Wheelstype, String engine) {
        this.model = model;
       for(int i=0;i<4;i++)
       {
           Wheels[i]=new Wheel(i+1,Wheelstype);
       }//实例化数组成员
        this.engine.type = engine;
    }

    void changeWheel(int a, String type) {
        Wheels[a - 1].type = type;
    }

    void start() {
        System.out.println(model + " firing");
        engine.start();
        for (int i = 0; i < 4; i++) {
            Wheels[i].roll();
        }

    }
}

package f2;
/*有字符串属性type记录发动机的型号,
有构造方法,可设置发动机的型号
有方法start()启动引擎(输出下面样例中包含发动机型号和“starts”的字符串)*/
class Engine {
    String type;
    Engine()
    {

    }
    Engine(String type) {
        this.type = type;
    }

    void start() {
        System.out.println(type + " starts");
    }
}
package f2;
/*有字符串属性type记录轮胎的型号
有整数类型属性index记录当前轮胎编号
(1:front-left,2:front-right,3:back-left,4:back-right),

有构造方法,可设置轮胎的型号和编号

有方法roll()表示轮胎正在转动
(输出下面样例中包含轮胎型号、轮胎位置和“rolling”的字符串)*/
public class Wheel {
    String type;
    int index;
    public Wheel()
    {
    }
    public Wheel(int a, String b) {
        type = b;
        index = a;
    }

    public void roll() {
        switch (index) {
            case 1:
                System.out.println(type + "  front-left" + "rolling");
                break;
            case 2:
                System.out.println(type + "  front-right" + "rolling");
                break;
            case 3:
                System.out.println(type + "  back-left" + "rolling");
                break;
            case 4:
                System.out.println(type + "  back-right" + "rolling");
                break;
            default:
                System.out.println("error\n");
                break;
        }
    }
package f2;
public class Test
{
    public static void main(String[] args)
    {
        String wheel="BridgeStone";
        String model="BMW";
        String engine="Mode L";
        Car car1=new Car(model,wheel,engine);
        car1.start();

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

        model="Benz";
        engine="Model S";
        Car car2=new Car(model,wheel,engine);
        car2.changeWheel(2,"Michelin");
        car2.start();
    }
}

第十一章:类方法重载

一个类多个名字相同,参数的个数或者类型不同的构造方法,就是重载的构造方法。调用时找的是最匹配的那个方法。

引用类型指向实例,所以对象的复制不能图方便用=。

1.clone()

2.org.apache.commons中的BeanUtils,PropertyUtils

3.序列化实现

第十二章:静态

private static int counter =0;
public Student(int x,int y)
{
    this.x=x;this.y=y;
    counter++;
}
public static int getCounter()
{
    return counter;
}

//如果要访问静态方法,使用类名访问
Student.getCounter();

静态属性和静态方法称为类属性和类方法。

非静态属性和非静态方法称为实例属性和实例方法。

第十三章:泛化

所谓泛化,就是把很多类方法中一样的部分,搞出来搞成一个模板,通过继承的方式来使用这个模板,减少重复。

public  class  Test{
        public  static  void  main(String  []  args){
                Teacher  t  =  new  Teacher("zhang",  45,  1886);
                Worker  w  =  new    Worker  ("wang",  42,  1550,2);                
                t.display();        
                w.display();

        }
}

abstract  class  Person{
        private  String  name;
        private  int  age;
        
        public  Person(String  name,  int  age){
                this.name  =  name;
                this.age  =  age;
        }
        
        public  abstract  void  display();
}

class  Teacher  extends  Person{
        private  double  salary;
        
        public  Teacher(String  name,  int  age,  double  salary){
                super(name,  age);
                this.salary  =  salary;
        }
        
        
        public  void  display()
{
                System.out.println("My  salary  is  "  +  salary);
        }
}

class  Worker  extends  Person{
        
        private  double  salary;
        private  int  level;

        public  Worker(String  name,int  age,double  salary,int  level){
                super(name,age);
                this.salary=salary;
                this.level=level;
        }

        public  void  display(){
                System.out.println("My  level  is  "  +  level);
        }

}

public  class  Test{
        public  static  void  main(String  []  args){
                Teacher  t  =  new  Teacher("zhang",  45,  1886);
                Worker  w  =  new    Worker  ("wang",  42,  1550,2);                
                t.display();        
                w.display();
        }
}
abstract  class  Person{
        private  String  name;
        private  int  age;
        
        public  Person(String  name,  int  age){
                this.name  =  name;
                this.age  =  age;
        }
          public  abstract  void  display();
}
class  Teacher  extends  Person{
        private  double  salary;
        public  Teacher(String  name,  int  age,  double  salary){
                super(name,  age);
                this.salary  =  salary;
        }
                public  void  display(){
                System.out.println("My  salary  is  "  +  salary);
        }
}
class  Worker  extends  Person{
        private  double  salary;
        private  int  level;
        public  Worker(String  name,int  age,double  salary,int  level){
                super(name,age);
                this.salary=salary;
                this.level=level;
        }
        public  void  display(){
                System.out.println("My  level  is  "  +  level);
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值