黑马程序员_JavaSE基础09 之 继承extends 实现implements 抽象类 接口

时间:2022-03-11 00:42:51
----------------------      android培训java培训、期待与您交流!   ---------------------
JavaSE_09  笔记 
                       Java语言基础之  继承extends 实现implements  抽象类 接口
 
1、 子父类构造函数的特点:
 ① 子类构造函数第一行有一个默认的调用父类的构造函数。super();
 ② 父类的构造函数 既没有被复写,也没有被继承。
 ③ 不管子类是在有参还是无参构造函数中,默认调用的都是父类无参构造函数,super() ,除非你明确指明要调用父类中哪个构造函数。
 ④ super 和 this 都只能定义在函数的第一行,所以只能有一个,但可以保证的是,子类中肯定会有其他的构造函数访问父类的构造函数。
 ⑤ 构造函数的访问权限同class 的访问权限相同。
 
2、
class Fu
{
Fu()
{
show(); // ③父类的构造函数进栈,调用的是子类重写后的show方法。
}
show(){}
}
 
class Zi
{
int num=8;  //①new Zi(),子类属性先初始化。
Zi()// ②然后子类构造函数进栈,
{
super(); //④父类构造函数出栈。
System.out.println("zi run "+num); //此句前num是默认初始化0,此句后是显示初始化8.
}
show(){}
}  
总结:子父类都用到了子类的常量的时候,super()之前会使用子类默认的初始化值,super()之后则使用显示的初始化值。
 
3、一个对象的实例化过程: Zi z=new Zi();
①JVM会先读取指定路径下的class文件,并加载进内存,并先会加载zi的fu类。
②new后,在堆内存中开辟空间,分配地址。
③在对象的堆空间中,对对象中的属性进行默认初始化。
④调用对应的构造函数进行初始化。
⑤在zi() 构造函数中,第一行会先调用父类中构造函数进行初始化。
⑥父类初始化完毕后,再对子类的属性进行显示初始化。
⑦在进行子类构造函数的特定初始化。
⑧初始化完毕后,将地址值赋值给引用变量。
 
4、 面向对象之final 
①fianl修饰的类不可以被继承。
②final修饰的方法不可以被覆盖。
③final修饰的变量是一个常量,只能赋值一次。
④规范:常量所有字母都大写,多个单词,中间用_连接。
Public static final double My_p= 3.14; // 全局常量
 
5、面向对象之抽象类特点
①方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰。抽象方法必须定义在抽象类中,并且该类必须被abstract修饰。
②抽象类不能实例化。
③抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,被New,否则这个子类还是抽象类。
④abstract不能和private,static,final 共存。
 
6、面向对象之接口 interface
Interface:当一个抽象类中的方法都是抽象的时候,可以将抽象类用interface表示。
①接口中常见的成员,默认可以不写,
全局常量:public static final ; 
抽象方法:public abstract ;
②接口中的常用都是公共权限
 
7、继承extends和实现implements的区别:
 ①对于extends继承,子类只需要从父类中拿自己需要的东西。
 ②对于implements实现,对于父类的东西,子类必须全部实现。
 ③类与类之间是继承关系,类与接口是实现关系。
 
8、接口的实现implements (Zi like Fu)
① 接口改善了Java不能有多继承的缺陷,可以用来多实现。
② 接口对外暴露规则,是程序的功能扩展,降低耦合性。
③ 类和接口间是实现关系,接口间是继承关系。
 
                                                                  2012/9/04     By  Mary_k