第四周学习总结 补充

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类里   

原文地址:https://www.cnblogs.com/zoujuns/p/5352008.html