方法和封装

2020-12-24  本文已影响0人  阿木木笔记

来自拉钩教育-JAVA就业集训营

构造方法的基本概念

class 类名 {
    类名(形参列表){
        构造方法体;
    }
}
class Person {
    person(){
        -Person类中的构造方法
    }
}
/*
    编程实现Person类的定义
*/
public class Person {
    
    String name; // 用于描述姓名的成员变量
    int age; // 用于描述姓名的成员变量
    
    // 自定义构造方法
    Person() {
        System.out.println("我就是自定义的构造方法!");
    }
    
    // 自定义成员方法实现所有特征的打印
    void show() {
        System.out.println("我是" + name + ",今年" + age + "岁了!");
    }
    
    public static void main(String[] args){
        
        // 1.声明一个 Person 类型的引用指向 Person 类型的悐
        Person p1 = new Person();
        // 并打印特征
        p1.show();
    }
}

默认构造方法

构造方法的作用

/*
    编程实现Person类的定义
*/
public class Person {
    
    String name; // 用于描述姓名的成员变量
    int age; // 用于描述姓名的成员变量
    
    // 自定义构造方法
    Person(String s, int i) {
        // System.out.println("我就是自定义的构造方法!");
        //name = "张飞";
        //age = 30;
        name = s;
        age = i;
    }
    
    // 自定义成员方法实现所有特征的打印
    void show() {
        System.out.println("我是" + name + ",今年" + age + "岁了!");
    }
    
    public static void main(String[] args){
        
        // 1.声明一个 Person 类型的引用指向 Person 类型的悐
        Person p1 = new Person("张飞", 30);
        // 并打印特征
        p1.show();
        
        Person p2 = new Person("关羽", 35);
        p2.show();
    }
}

案例题目(编程实现Point类)

/*
    编程实现Point类的定义
*/
public class Point {
    int x; // 用于描述横坐标的成员变量
    int y; // 用于描述纵坐标的成员变量
    
    // 自定义无参构造方法
    Point(){}
    
    // 自定义有参构造方法
    Point(int i, int j) {
        x = i;
        y = j;
    }
    
    // 自定义成员方法实现特征的打印
    void show(){
        System.out.println("横坐标是:" + x + ",纵坐标是:" + y);
    }
    
    public static void main(String[] args){
        
        // 1.使用无参方式构造对象并打印特征
        Point p1 = new Point();
        p1.show();
        
        // 2.使用有参方式构造对象并打印特征
        Point p2 = new Point(3, 5);
        p2.show();
    }
    
}

方法重载的概念

重载的体现形式

/*
    编程实现方法重载主要形式的测试
*/
public class OverloadTest {
    
    // 自定义成员方法
    void show() {
        System.out.println("show()");
    }
    
    void show(int i){ // ok 体现在方法参数的个数不同
        System.out.println("show(int)");
    }
    
    void show(int i, double d){ // ok 体现在方法参数的个数不同
        System.out.println("show(int, double)");
    }
        
    void show(int i, int j){ // ok 体现在方法参数的类型不同
        System.out.println("show(int, int)");
    }
            
    void show(double d, int i){ // ok 体现在方法参数的顺序不同
        System.out.println("show(double, int)");
    }       
    
    // void show(double a, int b){ // error 与参数变量名无关
        // System.out.println("show(double, int)");
    // }
    
    // void show(double d, int i){ // error 与返回值类型无关
        // System.out.println("show(double, int)");
    // }
    
    public static void main(String[] args) {
        // 1.声明 OverloadTest 类型的引用指向该类型的对象
        OverloadTest ot = new OverloadTest();
        
        // 2.调用 show 方法
        ot.show();
        ot.show(66);
        ot.show(66, 3.14);
        ot.show(66, 14);
        ot.show(3.14, 14);
        // ot.show(3.14, 14);   
    }
}

练习题目(编程实现Point类)

/*
    编程实现Point类的定义
*/
public class Point {
    int x; // 用于描述横坐标的成员变量
    int y; // 用于描述纵坐标的成员变量
    
    // 自定义无参构造方法
    Point(){}
    
    // 自定义有参构造方法
    Point(int i, int j) {
        x = i;
        y = j;
    }
    
    // 自定义成员方法实现特征的打印
    void show(){
        System.out.println("横坐标是:" + x + ",纵坐标是:" + y);
    }
    
    // 自定义成员方法实现纵坐标减1的行为
    void up() {
        y--;
    }
    // 自定义成员方法实现纵坐标减去参数指定数值的行为
    void up(int dy) {
        y -= dy;
    }
    
    public static void main(String[] args){
        
        // 1.使用无参方式构造对象并打印特征
        Point p1 = new Point();
        p1.show();
        
        // 2.使用有参方式构造对象并打印特征
        Point p2 = new Point(3, 5);
        p2.show();
        
        System.out.println("-----------------------------------------");
        
        // 3.调用重载的成员方法
        p2.up();
        p2.show();
        p2.up(2);
        p2.show();
        
    }
    
}

重载的实际意义

this的基本概念

/*
    编程实现this关键字的使用
*/
public class ThisTest {
    
    // 自定义构造方法
    ThisTest(){
        // this代表当前正在构造的对象
        System.out.println("构造方法:this = " + this);
    }
    
    // 自定义成员方法
    void show() {
        // this代表当前正在调用的对象
        System.out.println("成员方法:this = " + this);
    }
    
    public static void main(String[] args) {
        
        // 1.声明ThisTest类型的引用指向该类型的对象
        ThisTest tt = new ThisTest();
        // 2.调用show方法
        tt.show();
        System.out.println("main方法中:tt = " + tt);
        
        
    }
}

this关键字工作原理

this关键字使用方式

引用变量的注意事项

阶乘的计算方式

/*
    编程实现累乘积的计算打印
*/
public class JieChengTest {
    // 自定义成员方法实现将参数 n 的阶乘计算出来并返回
    // 1!= 1; 2! = 1 * 2; 3! = 1*2*3;
    int show(int n) {
        // 递推
        int num = 1;
        for (int i = 1; i <= n; i++) {
            num *= i;
        }
        return num;
    }
    
    public static void main(String[] args) {
        //1.声明 JieChengTest类型的引用指向该类型的对象
        JieChengTest jct = new JieChengTest();
        // 2.调用方法进行计算并打印
        int res = jct.show(5);
        System.out.println("最终的计算结果是:" + res); // 120
    }
}

递归的基本概念

/*
    编程实现累乘积的计算打印
*/
public class JieChengTest {
    // 自定义成员方法实现将参数 n 的阶乘计算出来并返回
    // 1!= 1; 2! = 1 * 2; 3! = 1*2*3;
    int show(int n) {
        // 递归的方式
        // 当n的数值为1是,则阶乘的结果就是1
        if (1 == n) return 1;
        // 否则阶乘的结果就是 n * (n -1)!
        return n * show(n - 1);
    }
    
    public static void main(String[] args) {
        //1.声明 JieChengTest类型的引用指向该类型的对象
        JieChengTest jct = new JieChengTest();
        // 2.调用方法进行计算并打印
        int res = jct.show(5);
        System.out.println("最终的计算结果是:" + res); // 120
    }
}

递归的注意事项

费式数列的递归实现

/*
    编程实现费式数列的计算并打印
*/
public class FeeTest {
    // 自定义成员方法实现费式数列中第n想数值的计算并返回,n由参数指定
    // 1 1 2 3 5 8 13 21 ……
    int show(int n) {
        // 1.使用递归的方式进行计算
        // 当 n = 1或者 n = 2时,结果是1
        if (1 == n || 2 == n) {
            return 1;
        }
        // 否则结果是前两项的和
        return show(n-1) + show(n-2);
    }
    
    public static void main(String[] args) {
        // 1.声明 FeeTest 类型的引用指向该类型的对象
        FeeTest ft = new FeeTest();
        // 2.调用方法计算并打印
        int res = ft.show(5);
        System.out.println("计算结果是:" + res); // 5
    }
}

费式数列的递推实现

/*
    编程实现费式数列的计算并打印
*/
public class FeeTest {
    // 自定义成员方法实现费式数列中第n想数值的计算并返回,n由参数指定
    // 1 1 2 3 5 8 13 21 ……
    int show(int n) {
        // 2.使用递推的方式进行计算
        int ia = 1;
        int ib = 1;
        for (int i = 3; i <= n; i++) {
            int ic = ia + ib;
            ia = ib;
            ib = ic;
        }
        return ib;
    }
    
    public static void main(String[] args) {
        // 1.声明 FeeTest 类型的引用指向该类型的对象
        FeeTest ft = new FeeTest();
        // 2.调用方法计算并打印
        int res = ft.show(55);
        System.out.println("计算结果是:" + res); // 5
    }
}

封装的概念

封装的实现流程

/*
    编程实现 Student 类的封装
*/
public class Student {
    // 1.私有化成员变量,使用 private 关键字修饰
    // private关键字修饰表示私有的含义,也就是该成员变量只能在当前类的内部使用
    private int id;      // 用于描述学号的成员变量
    private String name; // 用于描述姓名的成员变量
    
    // 3.在公有的构造方法中调用set方法进行合理值的判断
    public Student() {}
    public Student(int id, String name) {
        setId(id);
        setName(name);
    }
    
    // 2.提供公有的get和set方法,并在方法体重进行合理值的判断
    // 使用public关键字修饰表示公有的含义,也就是该方法可以在任意位置使用
    public int getId() {
        return id;
    }
    public void setId(int id) {
        if (id > 0) {
            this.id = id;
        } else {
            System.out.println("学号不合理哦!!!");
        }
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    // 自定义成员方法实现特征的打印
    // 什么修饰符都没有叫做默认的访问权限,界别结余private和public之间
    void show() {
        // System.out.println("我是" + name + ",我的学号是" + id);
        System.out.println("我是" + getName() + ",我的学号是" + getId());
    }
}

/*
    编程实现 Student 类的测试
*/
public class StudentTest {
    public static void main(String[] args) {
        // 1.声明 Student 类型的引用指向该类型的对象
        Student s1 = new Student();
        // 2.对成员变量进行赋值并打印
        // s1.id = -1001;
        // s1.name = "张飞";
        s1.setId(-1001);
        s1.setName("张飞");
        s1.show();
        
        System.out.println("------------------------------------------");
        
        // 3.使用有参方式构造对象的
        Student s2 = new Student(-1001, "张飞");
        s2.show();
        
    }
}

学生信息的录入

JavaBean的概念

上一篇 下一篇

猜你喜欢

热点阅读