不学面向对象的话很多高层次的开发都没办法开始
学了好多忘写博客了,这可不行,回顾下
之前学过
系统提供的类例如String是可以直接使用的,我们可以直接创建或使用String对象,太简单就不说了
对象变量和普通变量是不同的
一、用类制造对象
对象变量是对象的管理者而非所有者!!
所有涉及到赋值函数参数传递和比较都与普通变量有所不同。
类和对象的关系:类定义了对象长什么样,对象则是按照类的定义所制造出来的实体,
一个类可以创建很多对象,每个对象有自己的数据。
对象是实体,可以为我们做事情,是根据类的定义创造出来的东西。
而类是一种规范,我们通过类的定义来创造对象。
个人理解就是:类是模子,对象就是模子打出来的一个个实体,但是实体之间是不一样的。
二、定义类
然后我们可以自己来创造类,不是,是定义类,然后用自己定义的类来创建一个个对象。
还有插一个翁恺老师的这个图,让我知道为什么数据要用private,最重要的是懂得封装原来就是这么一回事
然后跟着翁恺老师做了一个模拟自动售货机hhh,饶了我的的起名叭
package shouhuoji;
public class Shouhuoji {
int rest=0;
int total=0;
int price=80;//固定每个商品的价格都是80元
void showdescription()
{
System.out.println("Welcome");
}
void showrest()//显示屏显示余额
{
System.out.println(rest);
}
void insertmoney(int money)//投币
{
rest = rest+ money;
}
void getfood()//柜子底下出东西hhh
{
if(rest>=price)
{
System.out.println("Here you are");
rest-=price;
total+=price;
}
}
public static void main(String[] args) {
Shouhuoji vm = new Shouhuoji();
vm.showdescription();
vm.showrest();
vm.insertmoney(100);
vm.getfood();
vm.showrest();
}
}
还是要强调一遍:对象变量是对象的管理者而不是所有者!!
如果我们定义两个对象,然后调试运行我们就会发现,这两个对象的id是不同的,id不同就代表这两个对象是不同的。
不同的对象各自的成员变量是不同的!!
三、成员变量与成员函数
. 运算符
通俗来说就是让对象做事,具体应该调用的是我们在类里面构造的函数或者成员变量
在函数中可以直接写成员变量的名字来访问成员变量,而访问的对象就是一个看不见的this
this是成员函数的一个特殊的固有的本地变量,它表达了就是调用函数的这个对象(有点混乱,慢慢理解)
大多数时候构造函数里的this可以省略,但是写个this,再打个 . ,有时候可以少打很多字,(滑稽~~)
这个 . 运算符能让函数和对我们想要进行操作的对象之间建立一种联系,
函数是通过对象来调用的
Tips:两个对象的区别
(1)本地变量:定义在函数内部的变量
生存期:函数内部;作用域:函数内部
(2)成员变量:定义在类里面的变量
生存期:对象的生存期;作用域:类内部的成员函数
四、
成员变量在定义的时候可以给定初始值,也可以不给
如果不给那么自动赋0值或null
也可以以函数的形式给成员变量赋值,甚至可以写构造函数来进行初始化
构造函数:与类的名字完全相同的成员函数
作用:创造类的时候自动调用此函数
这个函数不能有任何返回类型!
但是构造函数可以传入参数
一个类可以有多个不同的构造函数,只要他们的参数表不同(就是传入参数的个数,类型,甚至顺序不同就好)
创造对象的时候我们给定不同顺序或类型的参数就会自动调用不同的构造函数
通过this() 可以在一个构造函数里调用其他构造函数
但是只能在构造函数里的第一句而且只能使用一次
然后就是函数重载的定义了
一个类里的同名但参数表不同的函数构成了重载关系
over
哈哈奉上我自己写的关于分数运算的类
package fraction;
import java.util.Scanner;
class Fraction {
private int a;
private int b;
static int gcd(int x,int y)//自己写个gcd,用于分子分母化简
{
if(x==0) return y;
if(y==0) return x;
if(x>y) return gcd(y,x%y);
else return gcd(x,y%x);
}
Fraction()//这个构造函数好像没什么意思
{
this.a=0;
this.b=0;
}
Fraction(int a,int b)//给定分子分母,那么我们就能通过调用构造函数创造对应的一个对象,分数
{
this.a=a;
this.b=b;
}
double ToDouble()//转化为浮点类型
{
return a/b;
}
Fraction plus(Fraction f)//分数的加法,返回的也应该是Fraction类型
{
int c =this.b*f.b;
Fraction s = new Fraction();
s.b=c;
s.a=f.a*this.b+this.a*f.b;
return s;
}
Fraction multiply (Fraction f)//分数的乘法
{
int c=this.a*f.a;
int d=this.b*f.b;
Fraction k = new Fraction();
k.a=c;
k.b=d;
return k;
}
void print()//输出分子/分母
{
int yue=gcd(this.a, this.b);
this.a/=yue;
this.b/=yue;
if(this.b==1)//如果分母为1即最后结果是个整数那么只需要输出分子就够了
{
System.out.println(this.a);
}else
{
System.out.println(this.a+"/"+this.b);
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int a = cin.nextInt();
int b = cin.nextInt();
int c = cin.nextInt();
int d = cin.nextInt();//输入两个分数的分子分母
Fraction A = new Fraction(a,b);
Fraction B = new Fraction(c,d);//根据Fraction的类的定义创造两个对象
A.print();//下面是一些操作
B.print();
A.plus(B).print();
A.multiply(B).plus(new Fraction(5,6)).print();
A.print();
B.print();
cin.close();
}
}
结果如下:
也还挺好理解的嘛~~
后面继续更啦~~