7 23
public表示公开的,是可以在所有的包中进行方法
protected受保护的,可以在同一个包中以及不同包中的子类
java中修饰属性的默认权限修饰符时default只能在同一个包中的其他类来进行访问
private 只能在本类中进行方法
在构造方法中调用其他构造方法是不能直接通过方法名来调用,可以使用this
方法的重载,同一个类中允许出现多个同名方法,但是方法中的参数列表不尽相同
1 参数个数不同
2 参数类型不同
3 参数类型的顺序不同
局部变量使用前需要赋初始值
所谓的封装是指将该类的属性私有化,并提供相应的公开的 方法,不让直接通过对象,属性的方式直接访问该类的属性 ,而是通过提供的方法来进行访问。、
23种设计模式
单例(单态),工厂,构造器 ,代理
7 24
在子类的构造方法中第一行默认会有一个super(),该super是可以调用父类的构造方法的。
在构造方法中也可以通过this()的方法来调用本身自己的其他构造方法。
[[ 如果this和super都用了 ]],那么原来默认的super无效,且不能调用父类的构造方法,但是在子类的所有的构造方法中必有一个是通过super来调用父类构造方法的
如果父类中没有默认的无参构造方法,那么在子类的构造方法中必须通过super显示的来调用父类
而且super中的参数列表必须和父类中的参数列表保持一致
在子类和父类的构造方法中不能相互调用对方的构造方法
通过super()的方法调用父类的构造方法只能在子类的构造方法中使用,不能在普通方法中使用。
在子类的方法中可以直接使用super.的方式来调用父类的方法和属性
子类是不能通过super来调用父类的私有属性和私有方法的。
生命周期
父类的static属性和代码块
子类的static属性和代码块
父类的实例变量,初始化块
父类的构造方法
子类的实例变量,初始化块
子类的构造方法
重写,在子类中定义和父类方法名相同,返回值类型相同,参数列表相同的方法叫做方法的重写
重写时,需要注意,子类重写后的方法不能比父类有着更加严格的访问权限。只能大于或等于父类的访问权限。
重写后,通过子类对象调用的是子类重写后的方法,如果没有重写,默认调用父类中的方法
抽象类也是有构造方法的,而且该构造方法在每次实例化子类对象时调用
虽然抽象类不能直接实例化对象,但是我们可以通过NEW抽象类创建一个默认继承该抽象类的一个匿名内部类对象。
在java中只支持单继承,没有多继承。
在java中,如果一个类没有明确的继承关系,那么该类默认继承Object.
用final修饰的方法,子类是无法进行重写的。
如果子类不能重写该方法,那么子类在调用时就只能使用父类中的方法。
抽象方法是不能用final进行修饰的,抽象方法主要是被实现的,如果被final修饰,就不能进行重写,也就无法进行实现。
7 25
在给方法传参时,如果参数类型是一个父类类型,那么可以在调用该方法时直接将子类对象传递过去。
通过多态可以将子类对象当做父类类型的一个对象来调用,但是这样就会造成该对象无法调用原来类中自己定义的方法,只能调用重写父类中的方法。
判断对象是否是某一个类的方法:
1. instanceof 判断对象是否是某一个类的实例 返回值是true或false
2。通过class获取该对象的实际类名,对象.getClass().getName()返回的值是当前对象所对应的真实类名(包名.类名)
7 26
接口是一种纯粹的抽象类,接口中的方法默认是抽象方法
接口的作用,主要是用于规范标准
接口之间可以继承,如果一个类继承了一个有父接口的接口,那么需要重写接口中和父接口中所有的抽象方法
一个类只能继承一个父类,但是可以实现多个接口
类和父类之间的关系是继承的关系:is a
类和接口之间是实现的关系:has a
1. 如果一个类实现了多个接口,而且多个接口中有两个或两个以上的相同定义的抽象方法,那么该类所重写的方法是直接实现的那个接口
2.implements后面最近的优先级越高
多态的第二种体现形式,将实现类的对象定义为接口类型
如果实现类中有接口中没有定义的方法,那么通过多态后的对象不能调用这个方法。
通过new接口的形式可以创建一个默认实现该接口的匿名内部类对象,该匿名内部类默认实现了接口中所有的抽象方法。
可以将该匿名内部类对象通过多态定义成一个接口类型的对象,然后就可以直接通过 对象.方法 来进行调用。
在类中如果将一个方法定义为静态方法,那么该类的子类是不能重写该静态方法的。
在类中如果将一个方法定义为静态方法,这种叫静态方法绑定,该类的子类对象是可以直接通过对象名来调用父类的静态方法的。
在接口中用static修饰的方法叫做接口的静态方法,也就是通过static将该方法绑定到接口上
如果该接口有实现类,那么该实现类对象不能直接通过 对象名.方法 来调用接口中的静态方法。
只能通过 接口名.静态方法 来调用。
异常
异常主要分为两大类,一是运行时异常()
二是检查时异常
处理多种异常的方法,
1.用多个catch语句块进行处理
2.使用一个catch语句块直接处理总异常
3.使用逻辑“|”运算符
创建自定义异常的步骤
1.创建一个类,去继承Exception或Exception的子类
2.在自定义异常类中的构造方法里通过super()将异常信息传递给父类
3.使用时直接throw
7 27
ani.getClass
ani.getClass.getName
ani.getClass.get
ani.getClass
ani.getClass
将基本数据类型转化为对应的封装类
1.通过封装类的构造方法 int i=100;Integer inte= new Integer(i);
2.通过封装类的valueof方法 Integer inte1=Integer.valueof(i)
将封装类转换为基本数据类型
用封装类型的对象,调用对象XXXvalue
将封装类型转换为string,直接通过封装类对象调用trString()即可
将字符串转换为封装类
将基本数据类型转化成字符串
1.通过类型的自动提升用“+” string str3=" "+i;
2.通过string的valueof方法转换
将string类型转换成基本数据类型
string str5="10010";
通过基本数据类型所对应的封装类的parseXXX()
int i= Integer.parseInt(str5)
在类中定义多个内部类时,在编译后生成多个的Class文件,一个是外部类的class,余下是内部类的class
成员内部类,定义在外部类背部,外部类方法体外面的内部类叫做成员内部类(定义的位置和成员变量的位置相似)
内部类和外部类之间的关系不是继承关系,是所属关系,内部类是外部类的一个成员
在成员内部类中是不能定义静态的变量和方法的
内部类可以直接使用外部类的方法和属性
成员内部类可以定义抽象方法
在局部内部类中只能访问所在方法中的常量。
如果要在局部内部类中
在静态内部类中只能访问外部类的静态成员
创建匿名内部类的形式
1.
2.通过new一个接口,可以创建一个默认实现该接口的匿名内部类对象
如果该匿名内部类对象要多次调用可以通过多态技术,将该对象定义为它的父类类型。