构造方法(构造器) 声明构造方法的格式:权限修饰符 类名(形参){ }
1.构造方法是方法的一种特殊形式
2.构造方法的唯一调用方式就是在创建类的对象的时候,当前只有通过new关键字来调用
3.构造方法名称必须和类名相同,大小写也要一样
4.构造方法可以有参数
5.构造方法不能有返回值,不能使用void
6.当一个类没有显示的声明类的构造方法时,JVM会默认提供一个空参的构造方法 权限修饰符 类名(){ }
7.一旦显示定义类的构造方法,JVM将不再提供默认的构造器
8.构造方法可以有参数,如果参数是类必须的,那么就可以在构造方法的参数列表中出现,如果参数是类可选的,那么可以考虑使用对象.set()方法来设置
9.在构造方法里面可以调用普通方法,在普通方法中想使用实例化时也必须使用new关键字来实现
10.构造方法之间的调用形式通过this(参数列表)来调用。注意:不是this. 构造方法名(参数列表),
11.通过this(形参调用重载的构造方法时,this(形参) 语句必须放在首行
12.在调用其他构造方法时不能将“属性”作为参数传递
方法的重载(overload)
1.在同一个类中,方法的修饰符、返回类型、方法名相同,参数列表不同,这种形式叫做方法的重载
参数列表不同:(与变量名无关,类型相同即为相同)
1.数量不同
2.类型不同
3.顺序不同
2.构造方法和普通方法都可以重载
3.不定项参数
1.格式:方法的形参:数据类型…形参名
2.不定项参数在传参时,可以传入一个数组
3.传参时可以传入N个类型相同的值,N可以为0
4.不定项参数必须放在参数列表的最后面 例:(int a ,int b,int…nums)√ (int…nums,int q,int b)×
5.不定项参数与传入一个数组作为形参是相同的,他们之间不可以重载:例如:public void add(int… nums){} 与public void add(int[] nums){ } 不能重载,他们就是同一个方法。
面向对象的三个特征:封装、继承、多态
继承
1.继承的目的就是为了得到代码的复用
2.继承可以进行多层次继承
3.子类只能有一个直接父类
4.子类具有直接父类和间接父类的属性和方法
5.继承具有单根性和传递性
6.继承使用extends关键字来实现继承关系
7.父类不可以使用子类中的方法
8.当没有使用extends关键字来显示的声明一个类的父类时,他的父类默认为java.lang.Object类,Object类为所有类的根父类
9.子类可以根据需要重写父类中的方法(此时,子类与父类的方法签名(修饰符,返回类型,方法名,参数列表)相同,方法体不相同)
10.发生重写时,子类调用方法时使用的是其重写的方法,父类只能调用自己的方法或者他的父类的方法
11.Jdk5.0后推荐在重写的方法上面添加@override来检测重写是否正确
12.在子类中通过super关键字来调用父类的方法和属性
13.创建子类对象时会优先创建父类对象,使用子类构造方法时会优先调用父类无参数的构造方法
14.如果父类没有无参数的构造方法,那么在子类构造方法中必须要告诉子类调用父类的哪个构造方法来创建父类对象
15.通过super(参数列表)形式在子类构造方法中调用父类的构造方法,该代码必须是子类构造方法的第一行
16.任何一个类(除Object类)的构造方法首行,要么显示调用本类中重载的其他构造方法“this(形参列表)”或显示的调用父类中的指定构造方法“super(形参列表)”;要么默认调用父类空参的构造器“super()”。由于Object类中只有一个空参的构造器,所以在子类对象实例化的过程中肯定会调用Object()
注:首行只有一个,故this(形参)和super(形参)的调用在同一个构造方###法里面不能共存,同类之间也不能共存
若一个类中有N个构造器重载,最多有N-1个this(形参列表)能够使用,剩余一个要么显示的调用父类的构造器super(形参列表),要么使用默认的super()来调用父类的方法,子类实例化一定能够进行
多态 :使用前提:①有继承关系②有方法的重写
1.父类指向子类对象时,该对象只能调用父类中定义的方法,如果该方法在子类得到了重写,那么就调用重写后的方法;如果2.没有重写,那就调用父类中的方法。
3.该对象不能调用子类中特有的方法
4.高内聚,低耦合
5.当父类作为方法的参数,可以传入父类对象及其子类对象
6.当父类作为方法的返回值,可以返回父类对象及其子类对象
7.当父类作为方法的返回值,并且方法返回的是具体的子类对象,在调用时可以使
8.用父类对象接受或使用对应的子类对象接受(需强制类型转换)
抽象类:随着继承层次中,一个个新的子类的建立,子类变得越来越具体,父类变得越来越一般,更通用。类的设计应该保证父类和子类能够共享特征,
有时将一个类设计的非常抽象,以至于不能实例化,没有实例(使用abstract关键字来声明:权限修饰符+abstract+class+类名{ })
此类的实例化没有意义时,就将它定义为抽象的
1.抽象类不能被实例化(不能通过new关键字来创建对象),但是抽象类也有构造方法
2.抽象类的存在就是为了做为父类来降低程序的耦合性
抽象方法的原因:
此方法在所有类中存在
所有子类对方法的实现是不同的
3.抽象方法使用abstract来声明,不能有方法体存在({}都不能存在),抽象方法不能是private的
4.只有抽象类中可以存在抽象方法,含有抽象方法的类均为抽象类
5.抽象方法所在的类一定是抽象类(当父类是抽象类时,子类没有全部重写父类的抽象方法时,子类也必须声明为抽象类(类名前加abstract))
6.抽象类中,抽象方法与非抽象方法可以共存
接口 是常量和抽象方法的集合
1.所有的方法都是抽象方法,不能实例化,不允许普通方法和属性的存在,方法格式:public abstract void add(); 或void add();(省略public abstract)
2.接口使用interface关键字来声明
3.类在实现接口时使用implements,同时必须全部重写接口中的抽象方法,除非它也是抽象的类
4.当接口指向实现类对象时,只能调用接口中定义的方法
5.接口作为方法的参数,可以传入所有的实现类的对象
6.接口作为方法的返回类型,可以返回所有接口的实现类的对象
7.一个类只能有一个父类,但是可以同时实现多个接口 public class cellphone implements Usb,Player{ }