Java语言基础-day8

封装

封装的步骤

  1. 所有属性私有化,使用private关键字修饰,表示私有的,修饰的所有数据只能在本类中访问,在外部程序中不能访问,属性很安全。
  2. 对外提供简单的操作入口,以后外部程序想要访问这个类的私有属性,必须通过这些简单的入口访问: 对外提供两个公开的方法:set(修改)方法和get(读取)方法。
  3. set方法命名规范:public void setAge(形参){}
  4. get方法命名规范:public int getAge(形参){}

set和get方法没有static修饰
有static修饰的方法调用:类名.方法名(实参);
没有static修饰的方法调用:引用.方法名(实参);
封装的作用是可以将修改的属性给与条件,透明性,让用户看不到复杂。

快捷键生成所有的set和get方法:右键–>source(alt+shift+s)–>generate getters and setter

构造方法(构造器)constructor

语法结构:修饰符列表+构造方法名(形参){构造方法体}
构造方法不能指定返回值,因为返回值就是它自己。
构造方法名必须和类名保持一致。
构造方法的作用

  1. 构造方法的意义是通过new的调用创造对象。
  2. 创建对象的同时,初始化实例变量的内存空间。在堆内存中初始化实例变量(查看访问的是哪个方法,按ctrl建鼠标移动到查看的元素上,出现下划线单击)

如果没有写构造方法,系统默认会给这个类一个无参数的构造方法。 但是只要写了一个构造方法,那么系统就不会再自动给与无参数的构造方法。必须手动的构造无参数的构造方法。
同一个类的构造方法可以重载。

右键–>source–>gengerate constructor using fields(可以选择生成有参数的构造方法,调用的时候可以初始化实例变量)

myeclipse支持多行编辑,右上角(toggle block…)

this关键字

this是一个引用,是一个变量,this变量中保存了内存地址指向了自身,this存储在JVM堆内存对象内部。
当一个动作/行为执行的过程当中是需要对象参与的,那么这个方法一定要定义为实例方法。不要带static关键字,需要用引用.来调用。
this出现在实例方法中,指向当前执行此动作的对象。
有static的方法中,不能使用this。
带有static的方法中不能直接访问实例变量和实例方法,需要先创建对象。
一个实例方法中可以直接调用实例方法,不需要再创建对象。
用来区分局部变量和实例变量的时候,this.不能省略。
构造方法调用构造方法直接用this(),必须出现在构造方法第一行。

super关键字

super只能出现在实例方法和构造方法中。
super不能使用在静态方法当中。
super();只能出现在构造方法第一行,去调用父类的其他构造方法,作用是代码复用。
在子类调用构造方法:new B()后,首先先调用的是父类的无参构造方法,因为在子类的构造方法中默认第一行是super();所以在父类必须有一个无参构造方法,若已经写了一个有参构造方法,则必须写一个无参构造方法。或者用super(10),调用写出来的有参构造方法。
this()和super()不能共存。
通过子类的构造方法,调用父类的构造方法,实现代码复用,就用super(参数)来调用父类的构造方法来进行赋值。
子类和父类可以出现同名变量,但是要想清楚是谁的变量值。此时super.不能省略。
super.也可以调用父类的方法。this.调用的是子类覆盖的方法。

static关键字

如果一个变量在一个类中都一样,比如中国人的国籍都是中国,则使用static修饰这个变量,变为静态变量,内存空间在类加载的瞬间就开辟了。静态变量存储在方法区内存中。
静态代码块: static{Java语句},写在类最开始,在类加载的时候执行,只能执行一次,并且比main方法执行的早。可以编写多个静态代码块。
当有时候希望在类加载的时候执行某个动作,就需要用到静态代码块,比如日志等。

继承

继承的基本作用:代码复用,还延伸出了多态和方法的覆盖。
修饰符列表 +class+ 类名 +extends +父类名{}
一个类只能继承一个类。在c++中支持多继承。
父类又被称为基类,超类superclass
子类又被称为派生类subclass
私有的不支持继承,构造方法不支持继承,其他都继承。
虽然只能继承一个类,但是可以间接继承其他类。
Java中一个类默认继承Java.lang.object类。

方法的覆盖override

当父类中的方法已经无法满足当前子类业务需求,子类有必要将父类继承过来的方法需要将该方法覆盖。
子类覆盖方法:返回值相同,方法名相同,形参列表相同
访问权限可以更高,不能更低。
抛出异常只能更多,不能更少。
静态方法不存在覆盖。
覆盖只谈方法,不谈属性。

多态

向上转型(upcasting):子类型转换为父类型,自动转换
向下转型(downcasting):父类型转换为子类型,强制转换
Java中可以让父类引用指向子类型对象:Animal a=new Cat();
a可以访问父类和子类都有的方法,但是不可以访问子类独有的方法,因为它定义的是Animal类,只有将父类(Animal)转换成子类(Cat)才可以进行访问子类Cat类独有的方法。向下转型。Cat b=(Cat)a;
a instanceof Animal 结果为true:a是Animal类型,false不是。

Debug As:调试

多态最重要的一个作用:降低类和类之间的耦合度,让类有更高的扩张力。

例题

  • 一个主人类,一个小狗类,一个猫类。
  • 狗类和猫类都有一个动作行为吃方法。
  • 主人类有一个喂养宠物的feed方法,形参分别是Cat c,和Dog d。
  • 测试中调用喂养方法:zcx.feed(tom);
  • 上述程序中没有使用Java的多态,导致程序的耦合度很高,每次添加一个新的宠物,都会在主人类中添加新的feed方法。
  • 使用多态机制,创建一个宠物类,每个宠物狗,猫等都继承这个宠物类,并且用方法覆盖来改写该宠物是怎么吃饭的。
  • 主人类的方法:public void feed(Pet pet){pet.eat();}
  • 在调用主人喂养的方法:zcx.feed(new Cat());
  • 此时面向抽象的宠物,而不是具体的狗或者猫。

final关键字

final修饰的类无法继承
final修饰的方法无法被覆盖
final修饰的变量一旦赋值不可以重新赋值
final修饰的实例变量必须手动赋值,不能使用系统默认值。
final修饰的引用,一旦指向某个地址后就不能指向另一个地址后。但是内部的内存数据是可以修改的。
常量(一般全部大写):public static final 类型 常量名 =值

package包

方便程序的管理。
不同功能的类分别放到不同的包内,比较方便。
package +包名
命名规范:公司域名倒序+项目名+模块名+功能名

import

用来导入其他类,同一个包下的类不需要导入。不在同一个类下的包需要手动去导入。
import+包名.*;
import语句在package之下,class语句之上。
Java.lang.*不需要手动引入,系统自动引入,Java语言的核心类。

访问控制权限

用来控制元素的访问范围。
有:public,protected,private
可以修饰类,方法,变量。
protected:同包下可以访问,不同包但是继承可以访问。
没有写:同包下可以访问,其他包不可以。
private:只能在当前类中访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力打破规则的小雄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值