第四周学习总结 补充
1.构造方法不能被子类所继承,但子类对象创建时,会调用父类的构造方法产生对象。
2.由于子类对象中包含完整的父类对象,所以父类对象中的所有属性和方法都是可以继承的(包括私有属性和私有方法)。只是私有属性和私有方法不能被子类直接访问,可以通过公有方法调用。
3.静态代码块
static{
}
在类加载时自动执行,而且只执行一次。
当需要导入例如Scanner和FileReader这一类只需要一次导入或一次操作时,可以使用静态代码块,会比放在构造方法里好。
4.实例化代码块
{
}
对象每产生一个,就执行一次实例化代码块,执行时机是紧接着子类构造方法中的super()之后执行,在其他语句之前执行。
5.多态
允许一个父类变量引用子类的对象(相当于允许double x=int类型的3,小类型转变成大类型);允许一个接口类型变量引用实现类对象。反过来却不行。
一句话描述:相同的行为,却有不同的实现。
举例:
public class animals(){
}
public class dog extends animals(){
}
public class cat extends animals(){
}
Animals an1=new dog();
Animals an2=new cat();
由于子类中包含一个完整的父类对象,所以父类变量中定义的方法和属性在子类对象中都能找到。
所以父类对象可以指向子类对象。但是反过来,子类对象的方法和属性可能多于父类,所以子类变量不能指向父类对象。
多态调用时,用父类变量指向子类对象,只能调用父类变量中定义的方法和属性,不能调用子类特有的方法和属性。
多态调用方法时,优先调用子类重写的方法。
同理,所以object作为所有类的父类 可以指向任何类的对象 例如:object ob1=new Animals();object ob1=new dog();object ob1=new cat();
6.内部类
在类的内部定义类 就叫内部类 包含内部类的就是外部类
内部类相当于外部类的属性 内部类对象的产生必须依赖于外部类对象的产生
内部类的命名规则:外部类比如是a.class 内部类名为b 那么内部类class名为 a$b.class
例子:
public class student{
public student(){system.out.println(“学生类创建完成”)};
public class goodstudent{
public goodstudent(){
system.out.println("好学生内部类创建完成");
}
}
public static void main(String [ ] args){
Student stu1=new Student();
Student.Goodstudent gs1=stu1.new goodstudent();
}
}
7.多态的实现
高内聚 低耦合(暂时不理解)
8. for each循环 用于遍历数组元素
举例:
Animals [ ] arr1=new Animals [8 ];
for(Animals a:arr1){
a.eat();
}
9. a(变量名) instanceof type(如:student) 返回boolean值 注意 instanceof是连在一起的
举例:
if (arr[2] instanceof Human) {
System.out.println("同类");
}
对于一个变量 他属于自己的类 也属于父类 都 返回true
10.面向对象的特征
继承、封装、多态
补充:静态多态和动态多态
静态多态性指的是程序在编译时,系统就能决定调用哪个函数,如重载。
动态多态性指在运行中才能动态确定操作指针所指的对象,主要通过虚函数和重写来实现。
11.抽象类
如果一个类中的方法只有定义,没有具体的实现,那么这个方法就叫做抽象方法。
采用关键字abstract定义,拥有抽象方法的类就必须是抽象类,也必须用abstract修饰。
抽象类不能实例化对象。(比如人类,本身就是一个抽象类。不能说实例化一个人类出来,而应该说实例化一个人出来,这个人是抽象类人类的子类,实例化也由这个子类去实现。)如果要实现只能通过指向子类对象 Human hu1=new Man();
抽象类的抽象方法由子类根据子类的自身特点分别实现。
抽象方法的一般形势:public abstract void getmoney();
抽象方法不能用private修饰,因为本来就是要用来子类继承实现功能的,也不能static修饰。
不能带有大括号{},否则报错,因为带有{}也是一种实现,而抽象方法是不能实现的。
在子类继承了抽象类以后,快捷添加抽象方法的方式是点击红叉,选择 add unimplement methods选项进行添加。
而且抽象类有几个抽象方法,子类就必须全部实现几个。如果不全部实现,那么就只能定义这个子类也是一个抽象类。
补充:一个文件里可以创建多个类,但只能有一个public 类 而且主方法必须放在这个public类里