java 自学日志【六】---面向对象之继承
2013-04-12 01:16
204 查看
------android培训,java培训,期待与您交流------
面向对象特征二--->继承 extends
继承:把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。这样的话,多个类就可以省略很多代码。这个关系就是继承。java中用extends关键字表示。
继承特点:1 提高了代码的复用性; 2 让类与类之间产生了关系,有了关系,才有了多态的特性;
注意:千万不要为了获取其他类的功能,简化代码而继承,必须是类与类之间有关系,有所属关系。
怎样判断是否继承??
看父类里的内容是否在子类中都具备,如不是,则不继承。
java语言中,只支持单继承,不支持多继承。因为多继承容易带来安全隐患,当多个父类中定义了相同功能,而功能内容不同,子类对父类的继承不能确定要运用哪一个,但java保留了这种机制,并用另外一种形式来体现,就是接口的多实现。
java支持多层继承,即一个继承体系,如果使用一个继承体系的功能?
1 先查阅父类的描述,以为父类中定义的是该体系中的共性方法;
2 在具体调用时,要创建最子类对象,因为父类可能不能创建对象,而创建子类可以使用更多的功能,包括父类的也包括子类特有的;
总结就是:先查阅父类功能,然后创建子类对象使用;
类与类之间的关系除了继承,还有聚合,聚集,组合.....
一个类的成员包括:变量,函数,构造函数;
子类,父类中变量的特点: 如果子类父类中出现 非私有的成员变量时,子类要访问本类的变量用this,要访问父类中的同名变量用super;
子类,父类中函数的特性:重写:当子类中出现与父类一模一样的函数时,子类对象调用该函数时,会运行子类函数的内容,如同父类的函数被覆盖一样,这种情况就叫重写。
注意:子类覆盖父类的方法,必须保证子类的该方法访问权限大于等于父类权限;静态只能覆盖静态;
重写与重载的区别(函数的两个特性):1 重写要求子类与父类的函数要一模一样 ; 2 重载只看函数的参数列表,不同即可;
子类,父类中构造函数的特点:
在对子类对象进行初始化时,父类的构造函数也会运行,这是因为子类构造函数默认第一行有一条隐式语句super(),super()会访问父类的空参构造函数,而且子类中所有的构造函数默认第一行都是super();
为什么子类一定要访问父类的构造函数?
以为父类的数据子类可以直接读取,所以子类建立对象时,需要先查阅父类是如何对这些数据进行初始化的,所以子类对象在初始化时,要先访问一下父类的构造函数,如果要访问父类中指定的构造函数,可以手动定义super语句来指定。
注意:super 语句一定要在子类的构造函数的第一行,构造函数不存在重写(覆盖)。
当然,子类的构造函数第一行也可以手动指定this语句,来访问本类中的构造函数,子类中至少有一个构造函数会访问父类中的构造函数,当父类没有空构造函数时,子类必须手动super()指定访问。
为什么this和super不能同时存在构造函数中?
因为他们都必须写在构造函数的第一行,初始化动作要先执行;
final 最终,修饰符,可以修饰类,变量,函数;
1 被final修饰的类 不可以被继承;而没有子类,就不可以被重写;
2 被final修饰的函数方法不可以被重写(覆盖);
3 被final修饰的变量是一个常量,只能赋值一次,既可以修饰成员变量,也可以修饰局部变量;
4 内部类定义在类的局部位置上时,只能访问被final修饰的局部变量;
抽象类 abstract
当多个类中出现相同的方法,但方法体不同,可以进行向上抽取,只抽取定义,而不抽取方法体,让子类继承后,自己去实现方法体。没有方法体的方法,我们需要用抽象标志下。抽象的关键字是:abstract,修饰类和方法。该方法称为抽象方法,包含抽象方法的类就是抽象类。
抽象类的特点:
1 抽象方法一定定义在抽象类中;
2 抽象方法和抽象类都必须被关键字 abstract所修饰;
3 抽象类不可以创建对象,因为调用抽象方法无意义;
4 抽象类中的抽象方法必须由子类复写其所有抽象方法后,建立子类对象调用,如果子类只复写了部分抽象方法,那么该子类还是一个抽象类;抽象类比一般类多了个抽象函数,就是类中可以定义抽象方法。抽象类不可以实例化。特殊:抽象类中可以不定义抽象方法,这样做仅仅是为了不让给类建立对象。
模板设计模式:
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分又在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去实现。
当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。用interface关键字表示。类与接口关系用实现implements表示。
class用于定义类,interface用于定义接口。
接口中的成员修饰符都是固定的:常量:public static final ;抽象方法:public abstract 。接口中的成员都是用public修饰的。
接口是不可以创建对象的,因为有抽象方法,需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化,否则,子类是一个抽象类。
接口可以被多实现,即一个类可以实现多个接口,这也是对类不支持多继承的另一种体现形式,接口间可以多继承,但被继承的接口之间不能存在只有返回值类型不同的同名函数。
接口的特点:
1 接口是对外暴露的规则。
2 接口是程序的功能扩展。
3 接口可以用来多实现。
4 类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
5 接口与接口之间可以有多继承关系。
接口和抽象类的区别:
1:抽象类只能被单继承
接口可以多实现,接口的出现避免了多继承的局限性。
2:抽象类中的数据特点:
成员变量:可以是变量,也可以是常量
成员方法:可以是抽象方法,也可以是非抽象方法
构造方法:有构造方法
接口中的数据特点:
成员变量:是常量。默认修饰 public static final
成员方法:都是抽象方法。都有默认修饰 public abstract
构造方法:没有构造方法
3:抽象类中定义的是继承体系中的共性功能。
接口中定义的是继承体系中的扩展功能。
4:抽象类被继承是"is a"关系:xx是yy的一种。
接口被实现是"like a"关系:xx像yy的一种。
面向对象特征二--->继承 extends
继承:把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。这样的话,多个类就可以省略很多代码。这个关系就是继承。java中用extends关键字表示。
继承特点:1 提高了代码的复用性; 2 让类与类之间产生了关系,有了关系,才有了多态的特性;
注意:千万不要为了获取其他类的功能,简化代码而继承,必须是类与类之间有关系,有所属关系。
怎样判断是否继承??
看父类里的内容是否在子类中都具备,如不是,则不继承。
java语言中,只支持单继承,不支持多继承。因为多继承容易带来安全隐患,当多个父类中定义了相同功能,而功能内容不同,子类对父类的继承不能确定要运用哪一个,但java保留了这种机制,并用另外一种形式来体现,就是接口的多实现。
java支持多层继承,即一个继承体系,如果使用一个继承体系的功能?
1 先查阅父类的描述,以为父类中定义的是该体系中的共性方法;
2 在具体调用时,要创建最子类对象,因为父类可能不能创建对象,而创建子类可以使用更多的功能,包括父类的也包括子类特有的;
总结就是:先查阅父类功能,然后创建子类对象使用;
类与类之间的关系除了继承,还有聚合,聚集,组合.....
一个类的成员包括:变量,函数,构造函数;
子类,父类中变量的特点: 如果子类父类中出现 非私有的成员变量时,子类要访问本类的变量用this,要访问父类中的同名变量用super;
class Fu { int num=4; //int num1 =4; } class Zi extends Fu { //int num2 =5; int num=5; void show() { System.out.println(num);// 省略了this关键字, } } class ExtendsDemo { public static void main(String[] args) { Zi z = new Zi(); z.show();//打印子类的num,如果打印父类的num,需要在show(super.num)声明 //System.out.println(z.num+"---"z.num);//打印子类的num //System.out.println(z.num1+"---"z.num2); } }
子类,父类中函数的特性:重写:当子类中出现与父类一模一样的函数时,子类对象调用该函数时,会运行子类函数的内容,如同父类的函数被覆盖一样,这种情况就叫重写。
注意:子类覆盖父类的方法,必须保证子类的该方法访问权限大于等于父类权限;静态只能覆盖静态;
重写与重载的区别(函数的两个特性):1 重写要求子类与父类的函数要一模一样 ; 2 重载只看函数的参数列表,不同即可;
class Fu { void show() { System.out.println("fu show"); } } class Zi extends Fu { void show()//子类覆盖了父类的show方法,权限要大于等于父类权限。 { System.out.println("zi show"); } } class ExtendsDemo { public static void main(String[] args) { Zi z = new Zi(); z.show();//子类的show覆盖了父类的show,打印子类的show。 } }
子类,父类中构造函数的特点:
在对子类对象进行初始化时,父类的构造函数也会运行,这是因为子类构造函数默认第一行有一条隐式语句super(),super()会访问父类的空参构造函数,而且子类中所有的构造函数默认第一行都是super();
为什么子类一定要访问父类的构造函数?
以为父类的数据子类可以直接读取,所以子类建立对象时,需要先查阅父类是如何对这些数据进行初始化的,所以子类对象在初始化时,要先访问一下父类的构造函数,如果要访问父类中指定的构造函数,可以手动定义super语句来指定。
注意:super 语句一定要在子类的构造函数的第一行,构造函数不存在重写(覆盖)。
当然,子类的构造函数第一行也可以手动指定this语句,来访问本类中的构造函数,子类中至少有一个构造函数会访问父类中的构造函数,当父类没有空构造函数时,子类必须手动super()指定访问。
为什么this和super不能同时存在构造函数中?
因为他们都必须写在构造函数的第一行,初始化动作要先执行;
class Fu { Fu(int x)//此时父类中没有默认空参构造函数,子类需要手动指定super语句。 { System.out.println("FU RUN"); } } class Zi extends Fu { Zi() { super(4);//子类手动定义。 //super();隐式语句,调用父类的构造函数。 System.out.println("zi run"); } Zi(int x) { super(4);//隐式语句 System.out.println("zi。。"+x); } } class ExtendsDemo { public static void main(String[] args) { Zi z = new Zi();//创建对象,会打印FU RUN,zi run; Zi z1 = new Zi(4); } }final 关键字
final 最终,修饰符,可以修饰类,变量,函数;
1 被final修饰的类 不可以被继承;而没有子类,就不可以被重写;
2 被final修饰的函数方法不可以被重写(覆盖);
3 被final修饰的变量是一个常量,只能赋值一次,既可以修饰成员变量,也可以修饰局部变量;
4 内部类定义在类的局部位置上时,只能访问被final修饰的局部变量;
抽象类 abstract
当多个类中出现相同的方法,但方法体不同,可以进行向上抽取,只抽取定义,而不抽取方法体,让子类继承后,自己去实现方法体。没有方法体的方法,我们需要用抽象标志下。抽象的关键字是:abstract,修饰类和方法。该方法称为抽象方法,包含抽象方法的类就是抽象类。
抽象类的特点:
1 抽象方法一定定义在抽象类中;
2 抽象方法和抽象类都必须被关键字 abstract所修饰;
3 抽象类不可以创建对象,因为调用抽象方法无意义;
4 抽象类中的抽象方法必须由子类复写其所有抽象方法后,建立子类对象调用,如果子类只复写了部分抽象方法,那么该子类还是一个抽象类;抽象类比一般类多了个抽象函数,就是类中可以定义抽象方法。抽象类不可以实例化。特殊:抽象类中可以不定义抽象方法,这样做仅仅是为了不让给类建立对象。
模板设计模式:
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分又在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去实现。
abstract class GetTime { public final void getTime() { long start = System.currentTimeMillis(); run(); long end = System.currentTimeMillis(); System.out.println("time="+(end-start)); } public abstract void run(); } class SubTime extends GetTime { public void run() { for (int x=0;x<4000 ;x++ ) { System.out.println(x); } } } class Time { public static void main(String[] args) { SubTime st = new SubTime(); st.getTime(); } }接口 interface
当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。用interface关键字表示。类与接口关系用实现implements表示。
class用于定义类,interface用于定义接口。
接口中的成员修饰符都是固定的:常量:public static final ;抽象方法:public abstract 。接口中的成员都是用public修饰的。
接口是不可以创建对象的,因为有抽象方法,需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化,否则,子类是一个抽象类。
接口可以被多实现,即一个类可以实现多个接口,这也是对类不支持多继承的另一种体现形式,接口间可以多继承,但被继承的接口之间不能存在只有返回值类型不同的同名函数。
interface Person { public static final int FEET=4; punlic abstract void speak(); } class Man implements Person { public void speak() { System.out.println("chinese"); } }
接口的特点:
1 接口是对外暴露的规则。
2 接口是程序的功能扩展。
3 接口可以用来多实现。
4 类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
5 接口与接口之间可以有多继承关系。
接口和抽象类的区别:
1:抽象类只能被单继承
接口可以多实现,接口的出现避免了多继承的局限性。
2:抽象类中的数据特点:
成员变量:可以是变量,也可以是常量
成员方法:可以是抽象方法,也可以是非抽象方法
构造方法:有构造方法
接口中的数据特点:
成员变量:是常量。默认修饰 public static final
成员方法:都是抽象方法。都有默认修饰 public abstract
构造方法:没有构造方法
3:抽象类中定义的是继承体系中的共性功能。
接口中定义的是继承体系中的扩展功能。
4:抽象类被继承是"is a"关系:xx是yy的一种。
接口被实现是"like a"关系:xx像yy的一种。
相关文章推荐
- java 自学日志【七】---面向对象之多态
- JAVA面向对象之继承
- 黑马程序员--------java面向对象 继承、接口、多态、Object类
- 《Java基础学习笔记》JAVA面向对象之继承
- 菜鸟的学习之路(3) —java 面向对象程序设计的封装、继承和多态
- java 面向对象中的继承
- Java面向对象之继承
- Java第四次作业--面向对象高级特性(继承和多态)
- 黑马程序员 java学习笔记——面向对象2:继承
- 【好程序员特训营】- 路新艺-Java面向对象之继承和重写
- Java基础(极客)——12、Java面向对象基本特征:继承
- Java记录 -13- 面向对象之继承
- 大数据之JAVA基础(六):面向对象--继承
- 笔记——Java面向对象之继承
- Java面向对象之继承
- java面向对象一:实现继承、重载、重写
- Java面向对象--继承
- 【Java学习-J.160525.0.19】Java 面向对象以及类与类的继承
- java面向对象下第一部分学习日志
- 2、Java面向对象笔记(继承)(抽象类)(多态)