Java-面向对象 (四)


类和对象基本概念

面向对象的特征:抽象封装继承多态

:对现实世界中事物的抽象。Student
对象:现实世界中具体的个体。张三、李四 这些具体的学生

类和对象的总结
1、现实世界都是由很多对象组成的,基于对象的共同特征抽象出类。
2、对象:真实存在的对象
3、类中包含:
1)所有对象所共有的特征–属性(静)
2)所有对象所共有的行为–方法(动)
4、类是对象的模板,对象是类的具体实例。
5、一个类可以创建多个对象:同一个类的不同对象,结构相同,数据不同。

一、数据类型的默认值

int类型默认值是:0
double类型默认值是:0.0
boolean类型默认值是:false
String类型默认值是:null
int[]类型默认值是:null
Student[]类型默认值是:null
boolean[]类型默认值是:null

int[] array = new int[3]; 里面的存放默认值是0
boolean[] array = new boolean[3]; 里面的存放默认值是false
Student[] array = new Student[3];里面的存放默认值是null

所有引用数据类型的默认值为:null

例如:
int [] array=new int[3]; array 已经有new赋值 默认值为0

int[] array 默认值为null

Student[] 存放Student类型的数组
//r在方法中定义的变量是:局部变量。
//局部变量必须要初始化: 1、赋默认值2、引用数据类型可以实力话一 个对象

二、面向对象

构造方法

特点:
1、方法名和类名一样
2、没有返回值
//无参构造方法
//如果不写,Java默认提供这样一个无参构造方法.
//如果你写了,Java就不会再提供这个无参构造方法

public Student() {
   System.out.println("Student.Student()");
}

this:

//有参构造方法
public Student(int id, String name, int age) {
   this.id = id;//把1这个值赋值给当前new出来的student对象的id属性
   this.name = name;
   this.age = age;
}
Student student = new  Student(1, "zhansgan", 20);
this.id = id;

this代表当前对象,把通过构造方法传递过来的值赋值给当前对象的id。
如果不写任何构造方法,系统默认提供一个无参数构造方法,只是我们看不到而已。
如果自己写了任何一个构造方法,系统就不会提供这个默认无参构造方法。所以说如果自己写了一个带参数的构造方法,就要把无参数构造方法也要写上。(后面使用或者学习的一些框架要new这个无参数的构造方法)(只要你写了任何一个构造方法,不管有参没参,系统都不会给你提供默认无参构造方法)

构造方法和一般方法的不同:
1、构造方法是在new对象的时候运行,而一般的方法是在对象调用的时候才执行。
2、一个对象的建立,构造方法只执行一次,而一般方法可以被改对象调用多次。

this关键字是在对象内部指代自身的引用

属性私有,使用属性

如果属性私有,可以通过get、set方法访问:

public void setAge(int age) {
   if (age > 0 && age < 130) {
      // The assignment to variable age has no effect
      // this.age 代表的就是属性age
      this.age = age;
   }
}
public int getAge() {
   // return age;
   return this.age;
}

可以右键 Generate --Getter and Setter 快捷创建

三、练习

1、请定义一个交通工具(Vehicle)的类,其中有:属性:速度(speed),体积(size)等等方法:移动(move()),加速speedUp(int speed),减速speedDown(int speed)等等.最后在测试类VehicleTest中的main()中实例化一个交通工具对象,并通过构造方法给它初始化speed,size的值,并且通过get方法打印出来。另外,调用加速,减速的方法对速度进行改变(改变speed的值),改变后的速度值在main()方法中打印出来。

public class Vehicle {
    private  int  speed;
    private  int  size;
    public void move(){
        System.out.println("交通工具的速度:"+speed+"体积为:"+size);
    }

    public Vehicle() {
    }

    public Vehicle(int speed, int size){
        this.size=size;
        this.speed=speed;
    }
    public int getSpeed(){
        return  speed;
    }

    @Override
    public String toString() {
        return "Vehicle{" +
                "speed=" + speed +
                ", size=" + size +
                '}';
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public double getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public void speedDown(int speed){
            this.speed += speed;

    }
    public void speedUp(int speed){
           this.speed += speed;
    }


}
   public static void main(String[] args) {
        Vehicle vehicle = new Vehicle(100,20);

        vehicle.speedUp(10);
        System.out.println(vehicle);
    }

2、编写Java程序,模拟简单的计算器。定义名为Number的类,其中有两个整型数据成员num1和num2,应声明为私有。编写构造方法,赋予num1和num2初始值,再为该类定义加(add)、减(sub)、乘(multi)、除(div)等公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。在main方法中创建Number类的对象,调用各个方法,并显示计算结果。

public class Number {
    private int  num1;
    private  int num2;

    public Number() {
    }

    public Number(int num1, int num2) {
        this.num1 = num1;
        this.num2 = num2;
    }

    public int getNum1() {
        return num1;
    }

    public void setNum1(int num1) {
        this.num1 = num1;
    }

    public int getNum2() {
        return num2;
    }

    public void setNum2(int num2) {
        this.num2 = num2;
    }

    public int add() {
        return num1 + num2;
    }

    public int sub() {
        return num1 - num2;
    }

    public int multi() {
        return num1 * num2;
    }

    public int div() {
        return num1 / num2;
    }
}
    @Test
    public void test1(){
//      通过new 构造方法,实例化一个对象
        Number number = new Number(3,5);
        int add = number.add();
        int multi = number.multi();
        System.out.println(multi);
        System.out.println(number.add());
    }

3、定义长方形类,含:属性:宽、高(整型);方法:求周长、面积;构造方法3个:(1)无参——宽、高默认值为1;(2)1个参数——宽、高相等;(3)2个参数——宽、高各为参数值。要求:进行测试计算周长和面积。
//如果一个类没有继承任何一个类,默认继承Object类
//如果不写任何构造方法,默认提供一个无参的构造方法
//super();子类构造方法中,首先实例化父类构造对象,默认会有一个super

public class Rectangle  extends  Object{
    private int height;
    private int width;

    public Rectangle() {
        height = 1;
        width = 1;

    }

    public Rectangle(int high) {
        this.height = high;
        this.width=high;
    }

    public Rectangle(int high, int width) {
        this.height = high;
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int girth(){
        return height *2+width*2;
    }
    public int area(){
        return height *width;
    }

    @Override
    public String toString() {
        return "Rectangle{" +
                "high=" + height +
                ", width=" + width +
                '}';
    }
}
    @Test
    public void test2(){
        Rectangle rectangle = new Rectangle(6,8);
        System.out.println(rectangle.area());
        System.out.println(rectangle.girth());
    }

4、定义一个点类Point,包含两个成员变量x和y,分别表示x和y坐标,2个构造函数Point()和Point(int x, int y),以及一个movePoint(int dx, int dy)方法实现点的移动(参数即为移动的大小),移动完成之后直接打印最新的坐标值。

public class Point {
    private int x;
    private int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public Point() {
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

   public void movePoint(int dx,int dy){
        x += dx;
        y += dy;
   }

    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}
    @Test
    public void test3(){
        Point point = new Point(2,5);
        System.out.println(point);
        point.movePoint(1,2);
        System.out.println(point);
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值