服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java 面向对象和封装全面梳理总结

Java 面向对象和封装全面梳理总结

2022-03-06 00:46代码小k Java教程

面向对象乃是Java语言的核心,是程序设计的思想,在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据

关于面向对象和封装的个人理解

类和对象

类:对事物的一种描述(具有共同属性和行为的事物的抽象),例如手机,属性:品牌价格,行为:玩游戏,刷vx;

对象:客观存在(在java中体现就是mian方法里面用类定义一个对象,然后用对象去调用方法或者调用成员变量)

二者关系:类为属性行为抽象,对象则为实体。

对象内存图理解:堆内存开辟空间,成员变量出现 并产生默认初始化值,将对象地址值记录以便于通过对象名调用成员变量。

成员变量和局部变量的区别:类中位置不同,内存中位置不同,生命周期不同,初始化值不同(成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)。

封装

private关键字:被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作(get,set方法)

this关键字:this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)。

封装理解: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问(private修饰和get,set方法)

封装的好处以及作用: 把代码用方法进行封装,提高了代码的复用性, 通过方法来控制成员变量的操作,提高了代码的安全性。

难题汇总

银行账户

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package test3;
 
public class bank {
    public static void main(String[] args) {
        //在测试类Bank中创建银行账户类对象和用户类对象,
        // 并设置信息,与显示信息
        Customer customer = new Customer("李华","123456789","987456321","新华小区");
        Account  account = new Account(1111115646,1000000,customer);
        customer.say();
        account.withdraw( 10000 );
        account.save( 9999999 );
        System.out.println(customer.say());
        System.out.println(account.getinfo());
        if (account.withdraw( 10000 )==true){
            System.out.println("取钱成功");
            System.out.println("余额还有"+account.getBalance());
        }else{
            System.out.println("取款失败");
        }
        if (account.save( 444444 )==true){
            System.out.println("存款成功");
            System.out.println("余额还有"+account.getBalance());
        }else{
            System.out.println("存款失败");
        }
    }
}
package test3;
/*2.定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer 
银行账户类Account有方法:(1)getInfo(),返回String类型,返回卡的详细信息
(2)取钱方法withdraw(),参数自行设计,如果取钱成功返回true,失败返回false
(3)存钱方法save(),参数自行设计,如果存钱成功返回true,失败返回false 
 其中Customer类有姓名、身份证号、联系电话、家庭地址等属性    Customer类有方法say(),
 返回String类型,返回他的个人信息。​在测试类Bank中创建银行账户类对象和用户类对象,
 并设置信息,与显示信息*/
public class Account {
    private int cid ;
    private int balance;
    private Customer customer;
 
    public Account(Customer customer) {
        this.customer = customer;
    }
 
    public int getCid() {
        return cid;
    }
 
    public void setCid(int cid) {
        this.cid = cid;
    }
 
    public int getBalance() {
        return balance;
    }
 
    public void setBalance(int balance) {
        this.balance = balance;
    }
    public Account(String s, int balance, Customer customer){
 
    }
    public Account(int cid,int balance, Customer customer){
        this.cid=cid;
        this.balance=balance;
        this.customer=customer;
    }
 
    //(1)getInfo(),返回String类型,返回卡的详细信息  号cid,余额balance,所属用户Customer
    public String getinfo(){
        String info = "卡号"+cid+"\n余额"+balance+"\n用户"+customer.getName();
         return info;
    }
    //取钱方法withdraw(),参数自行设计,如果取钱成功返回true,失败返回false
    public boolean withdraw(int out_balance)
    {
        if (out_balance <= balance)
        {
            balance -= out_balance;
            return true;
        }
 
        return false;
    }
 
    //存钱方法save(),参数自行设计,如果存钱成功返回true,失败返回false 
    public boolean save (int in_banlance){
        if (in_banlance >=0){
            balance += in_banlance;
            return  true;
        }
        return false;
    }
 
 
}
 
package test3;
//其中Customer类有姓名、身份证号、联系电话、家庭地址等属性 
public class Customer {
    private String name;
    private String idcard;
    private String call;
    private String adress;
 
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String isIdcard() {
        return idcard;
    }
 
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
 
    public String getCall() {
        return call;
    }
 
    public void setCall(String call) {
        this.call = call;
    }
 
    public String getAdress() {
        return adress;
    }
 
    public void setAdress(String adress) {
        this.adress = adress;
    }
    public Customer(){
 
    }
    public Customer(String name, String idcard,String call,String adress){
        this.name=name;
        this.idcard=idcard;
        this.call = call;
        this.adress=adress;
    }
    public String say(){
        String info = "姓名"+name+"\n身份证号"+idcard+"\n电话"+call+"\n地址"+adress;
        return info;
    }
}

理解类中引用类就是再写一个就行,不用想的太复杂。

坐标点

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package test2;
//定义一个类,用于描述坐标点
//
//​           0——————>X
//
//​          |
//
//​          |
//
//​          |                  P(X,Y)
//
//​          |
//
//​          |
//
//​          Y
//
//
//
//(1)具有计算当前点到原点距离的功能
//
//(2)求到任意一点(m,n)的距离
//
//(3)求到任意一点(Point p)的距离
//
//(4)具有坐标点显示功能,显示格式(x,y)
//
//(5)提供无参的构造器和一个有参的构造器
public class test2 {
    public static void main(String[] args) {
        point w=new point(10,20);
        w.oxy();
        w.mnxy( 66,77 );
        w.ponitp( 14,16 );
        w.show();
    }
}
public class point {
    int x ;
    int y ;
    int m ;
    int n ;
    public int getM() {
        return m;
    }
 
    public void setM(int m) {
        this.m = m;
    }
 
 
    public int getN() {
        return n;
    }
 
    public void setN(int n) {
        this.n = n;
    }
 
 
 
 
    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 point(){
 
 }
 public point(int x , int  y){
        this.y=y;
        this.x = x;
 }
 
 public void  oxy(){
     System.out.println(Math.sqrt( x*x+y*y ));
 }
 //(2)求到任意一点(m,n)的距离
    public void mnxy (int m , int n ){
        this.m=m;
        this.n=n;
        System.out.println(Math.sqrt( ((m-x)*(m-x)+(n-y)*(n-y)) ));
    }
//(3)求到任意一点(Point p)的距离
    public void ponitp (int z , int k ){
        System.out.println(Math.sqrt( ((z-x)*(z-x)+(k-y)*(k-y)) ));
    }
 
//(4)具有坐标点显示功能,显示格式(x,y)
    public void show(){
        System.out.println( "("+x+","+y+")" );
    }
 
}

学生随机数排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// An highlighted block
var foo = 'bar';package test1;
//定义类Student,包含三个属性:学号number(int),年级state(int),成绩 score(int)。
//创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
//问题一:打印出3年级(state值为3)的学生信息。
//问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
//提示: 1) 生成随机数:Math.random(),返回值类型double;  (Matn为工具类)([0,1})
//    2) 四舍五入取整:Math.round(double d),返回值类long 型
public class demo5 {
    public static void main(String[] args) {
        Students [] stu = new Students[20];
        for (int i = 0; i < stu.length; i++) {
            //给数组元素赋值
            stu[i]=new Students();
            //给Student的对象的属性赋值
            stu[i].number = i +1;//学号
            stu[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);//(6  + 1));//年级[1,6]
            stu[i].score = (int)(Math.random() *  (100 - 0 + 1));//(100 - 0 + 1));//成绩[0,100]
        }
        //遍历学生数组
        for (int i = 0; i < stu.length; i++) {
            //System.out.println(stu[i].number + "," + stu[i].state + ","
            //      + stu[i].score);
            System.out.println(stu[i].info());
        }
        System.out.println("*******************");
        //问题一:打印出3年级(state值为3)的学生信息。
        for (int i = 0; i < stu.length; i++) {
            if (stu[i].state == 3) {
                System.out.println(stu[i].info());
            }
        }
        System.out.println( "\t");
        //问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息。
        for (int i = 0; i < stu.length - 1; i++) {
            for (int j = 0; j < stu.length - 1 - i; j++) {
                if(stu[j].score > stu[j + 1].score){
                    //如果需要换序,交换的是数组的元素,Student对象!!!
                    Students temp = stu[j];
                    stu[j] = stu[j + 1];
                    stu[j + 1] = temp;
 
                }
            }
        }
        for (int i = 0; i < stu.length; i++) {
            System.out.println(stu[i].info());
        }
    }
}
public class Students {
    //学号number(int),年级state(int),成绩 score(int)。
     int number;
     int state;
      int  score;
 
    public int getNumber() {
        return number;
    }
 
    public void setNumber(int number) {
        this.number = number;
    }
 
    public int getState() {
        return state;
    }
 
    public void setState(int state) {
        this.state = state;
    }
 
    public int getScore() {
        return score;
    }
 
    public void setScore(int score) {
        this.score = score;
    }
    public String info(){
        return "学号:" + number + ",年级:" + state + ",成绩" + score;
    }

到此这篇关于Java 面向对象和封装全面梳理总结的文章就介绍到这了,更多相关Java 面向对象 内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_62265391/article/details/120965410

延伸 · 阅读

精彩推荐
  • Java教程5种必会的Java异步调用转同步的方法你会几种

    5种必会的Java异步调用转同步的方法你会几种

    这篇文章主要介绍了5种必会的Java异步调用转同步的方法你会几种,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    程序员Sunny11062021-11-19
  • Java教程Java Web使用POI导出Excel的方法详解

    Java Web使用POI导出Excel的方法详解

    这篇文章主要介绍了Java Web使用POI导出Excel的方法,结合实例形式详细分析了Java Web使用POI导出Excel的具体操作步骤、实现技巧与相关注意事项,需要的朋友可以...

    qq73422725532020-11-04
  • Java教程使用SpringBoot内置web服务器

    使用SpringBoot内置web服务器

    这篇文章主要介绍了使用SpringBoot内置web服务器操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    喜欢火影的木易杨10522022-01-19
  • Java教程聊聊Spring Cloud Cli 初体验

    聊聊Spring Cloud Cli 初体验

    这篇文章主要介绍了聊聊Spring Cloud Cli 初体验,SpringBoot CLI 是spring Boot项目的脚手架工具。非常具有实用价值,需要的朋友可以参考下...

    polly12082021-04-20
  • Java教程解决RestTemplate加@Autowired注入不了的问题

    解决RestTemplate加@Autowired注入不了的问题

    这篇文章主要介绍了解决RestTemplate加@Autowired注入不了的问题,具有很好的参考价值,希望对大家有所帮助。...

    梦想注定是孤独的旅行4722021-11-25
  • Java教程Java动态数组Arraylist存放自定义数据类型方式

    Java动态数组Arraylist存放自定义数据类型方式

    这篇文章主要介绍了Java动态数组Arraylist存放自定义数据类型方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    「已注销」8282022-03-02
  • Java教程详解SpringCloud Config配置中心

    详解SpringCloud Config配置中心

    这篇文章主要介绍了详解SpringCloud Config配置中心,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    liuhh6002021-07-20
  • Java教程java实现模拟进度计量器

    java实现模拟进度计量器

    这篇文章主要为大家详细介绍了java实现模拟进度计量器,模拟血压计实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参...

    Freedoman19904532020-07-17