1.面向对象的封装,构造函数!

 
今天学习了面向对象的第一个特征——封装,构造函数和this关键字。面向对象的特征:封装,多态,继承; 一,封装:是指隐藏对象的属性并实现细节,仅对外提供公共访问的方式,也就是将一类事物的特征和行为定义在类中,使用这个类创建对象, 那么这个对象就有了自己的属性和方法。**封装的属性:定义类的时候,成员变量都要用private修饰,私有化不允许其他类进行访问,提高安全性;如果想要类外修改,可以定义set方法,在方法中进行修改;如果需要类外获取,可以提供get方法,在方法中进行获取。设置(set)成员变量的方法:**返回值类型为void;**方法名为set开头后面跟属性名,属性名的首字母大写,例如:name属性就是setName,age属性就是setAge;**参数列表需要一个参数,类型和成员变量的类型一致;例: public static voidsetName(String name){};获取(get)成员变量的方法:**返回值类型和成员变量类型一致;**方法名为get开头后面跟属性名,属性名的首字母大写,例如:name属性就是getName,age就是getAge;**没有任何参数;例: public staticString getName(){};***封装原则:**将不需要对外提供的内容都隐藏起来;**把属性都隐藏,提供公共方法对其访问;***封装优点:**将变化隔离;**便于使用;**提高重用性,安全性;class Test6 { publicstatic void main(String[] args) { //创建一个person对象; Person p = new Person(); p.setName("lisi"); p.setAge(22); p.eat(); }}//创建一个类class Person { //将不需要对外提供的内容都封装,私有化; privateString name; //提供对外访问的方法,set和get publicvoid setName(String n) { name = n; } publicString getName() { return name; } //私有化年龄; privateint age; publicvoid setAge(int a) { age =a; } publicint getAge() { return age; } voideat() { System.out.println(name +" ," +age+"吃饭"); }}二,private和public的区别public是共有的,所有的类都可以使用,目前在无包的情况下和无修饰符一样,其他类可以访问private私有的,是权限修饰符,用于修饰类中的成员(成员函数和成员变量),只能在当前类访问,其他类都不能使用;**被private修饰的成员变量通常会对应2种访问方式,get和set,之所以对外提供访问方式,就因为可以再访问方式中加入逻辑判断等语句,对访问的数 据进行操作,提高代码的健壮性;***注意:封装不是私有,私有仅仅是封装的一种表现形式;三,构造函数(1)构造函数:构造函数是一种特殊的函数;函数名和类名相同,没有返回值类型,不可以写return,创建对象时自动调用;在定义一个类的时候,如果希望别人创建对象时就执行某些操作,那么就可以在构 造函数中定义一些代码;例如:class Person { //创建无参的构造函数Person() { System.out.println(“person run”); }}class PersonDemo { public static voidmain(String[] args) {//创建person类的对象; Person p = new Person();}}new Person() 对象一建立,就会调用与之相对应的构造函数Person();用于给对象初始化;(2)构造函数的重载:构造函数和普通函数一样,是可以重载的,函数名相同,参数列表不同,就是重载,在调用的时候,根据实际参数的类型,调 用对应的构造函数(3)什么时候使用构造函数?如果创建一个对象的时候,需要给这个对象的成员变量进行赋值,那么就可以使用 有参的构造函数,传入一些数据,构造函数中对成员变量赋值;(4)自动生成构造函数;定义一个类的时候,如果没有任何构造函数,那么编译时会自动生成一个无参的构 造函数,其中没有任何代码;***注意:只要写了任意一种构造函数,都不会再生成无参的构造函数了创建对象时一定对调用构造函数,无论有参的还是无参的,如果找不到都会报错;以后在定义类的时候,除非要求别人传入一个有参的构造函数,否则最好写一个无参的构造函数;class ConstructorDemo { public static voidmain(String[] args) { Person p1 = new Person(); Person P2 = new Person("lisi"); Person p3 = new Person(22); }} class Person { //无参的构造函数 public Person() {}//有参的构造函数, publicPerson(String name) { System.out.println("name="+name); } Person(int age) { System.out.println("age="+age); }}(5)构造函数的访问权限通常构造函数的访问权限都是公有的,除非不想让别人创建对象;(6)构造函数和一般函数的区别;1, 写法上不同2, 在运行上也有不同,构造函数是在对象建立就运行,给对象初始化,一个对象建立,构造函数只运行一次;而一般函数是对象调用才执行,一般函数可以被对象调用多次;(7)构造代码块: 对象建立就运行,且优先于构造函数执行; 构造代码块和构造函数区别: 构造代码块中定义的是不同对象共性的初始化内容,是给所有对象统一初始化,只要有对象建立就执行,而构造函数是给对应的函数进行初始化,对象建立只运行一次;四,this关键字1,构造函数中调用其他构造函数在构造函数的第一条语句,可以使用“this(参数)”形式调用当前类的其他构造函数;***注意:在构造函数中的调用不要形成递归;2,在函数中当做一个引用在调用一个函数的时候,函数中可以使用this来代表调用当前函数的对象,哪个对象调用函数,this就代表哪个对象;在局部变量和成员变量重名的时候,如果只想访问成员变量,那么就可以使用“this.变量名”的方式来访问。//练习this关键字;调用构造函数,class ThisDemo { public static voidmain(String[] args) { Person p1 = new Person(); p1.eat(); Person p2 = new Person("Tom"); p2.eat(); Person p3 = new Person(23); p3.eat(); Person p4 = new Person("Jom",24); p4.eat(); }}class Person { private Stringname; //成员变量私有 private int age; //构造函数重载, public Person() { this("nono",0); //调用当前类含有两个形式参数的构造函数, } publicPerson(String name) { this(name,0); //调用当前类含有两个形式参数的构造函数, } public Person(intage) { this("no",age); //调用当前类含有两个形式参数的构造函数, }//含有两个参数的构造函数,被其他三个构造函数所调用; publicPerson(String name, int age) { this.name = name; this.age = age; } public void eat() { System.out.println("I'm "+ name+",my age is"+age+" eatfood"); }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值