专业词汇-计算机-面向对象技术-OOP:继承

ylbtech-专业词汇-计算机-面向对象技术-OOP:继承

继承是面向对象软件技术当中的一个概念,与多态封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性方法或者重新定义、追加属性和方法等。

1.返回顶部
1、
中文名:继承
外文名:inheritance
2、
2.返回顶部
1、

概念

继承(英语:inheritance)是 面向对象软件技术当中的一个概念。这种技术使得 复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用
继承 就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
子类的创建可以增加新数据、新功能,可以继承父类全部的功能,但是不能选择性的继承父类的部分功能。继承是类与类之间的关系,不是对象与对象之间的关系。
例如:先定义一个类叫车,车有以下属性:车体大小、颜色、轮胎、方向盘、品牌、速度、排气量,由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
如果某类B“继承”另某类A,就把这个B称为“A的子类或派生类(subclass)”,而把类A称为“B的父类”也可以称为“A是B的超类或基类(superclass)”。
如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。
继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类别追加新的属性和方法也是常见的做法。一般静态的面向对象编程语言,继承属于静态的,意即子类别的行为在编译期就已经决定,无法在执行期扩充。
那么如何使用继承呢?用extends关键字来继承父类。
如上面A类与B类,当写继承语句时,class A类 extends B类{ } 其中A类是子类,B类是父类。
继承的语句格式:
class 子类名 extends 父类名{}
class 父类 { } class 子类 extends 父类 { }
 

继承关键字(keyword)

继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object当一个类没有继承的两个关键字,
则默认继承object(这个类在 java.lang包中,所以不需要 import)祖先类
1)extends关键字
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Animal {
     private String name;
     private int id;
 
     public Animal(String Name, String id) {
         this.name= name;
         this.id= id;
     }
 
     public void eat(){
         System.out.println(name+"正在吃");
     }
 
     public void sleep(){
         System.out.println(name+"正在睡");
     }
     
     public void introduce() {
         System.out.println("大家好!我是"+ id+ "号"+ name+ ".");
     }
}
 
public  class   Mouse extends   Animal {
     public  Mouse(String myName, intmyId) {
         super(Name, Id);
     }
}
 
2)implements关键字
implements 关键字可以变相的使Java 具有多继承的特性使用范围为类实现接口的情况,可以同时实现多个接口(接口之间采用逗号分隔)
1
2
3
4
5
6
7
8
9
10
11
12
public interface A {
     public void eat();
     public void sleep();
}
 
public interface B {
     public void run();
}
 
public  class   C implements A,B {
 
}
 
3)final关键字
final可以修饰类、变量、方法。实例变量也可以被final修饰,被 final 修饰的变量在Java中就是常量,
被 final 修饰的类的属性和方法自动地声明为 final,但是被final修饰实例属性和变量,并不能让所在类变成final类
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
声明类:finalclass类名 {//类体}
声明方法:修饰符(public/private/default/protected) final返回值类型 方法名(){//方法体}
4)static关键字
static修饰成员变量(属性)和方法、代码块(不能出现在方法内部),static修饰变量(属性)和方法,得到的是类变量和类方法,类变量和类方法用所在类的类名直接调用。 static和abstract不能一起使用
由static修饰的变量和方法,不能用this调用。静态方法可以调用静态的方法,普通方法也可以调用静态方法, 静态方法不能调用普通方法
5)this关键字
this 关键字在Java方法中只能用在实例变量和实例方法上,不能用在由static、final修饰的类变量和类方法上
如果在Java方法中,实例化的成员变量和某方法的参数变量同名时,根据内部屏蔽外部的原则,即实例化的成员变量在这个方法内暂时失效,
这时如果想在该方法中使用这被屏蔽的成员变量,用“this.成员变量名”的方式调用该成员变量,并且将参数变量赋值给this调用的成员变量,
格式如下:this.本类实例变量=参数变量;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Teacher {
     private String name; // 教师名称
     private double salary; // 工资
     private int age; // 年龄
 
     // 创建构造方法,为上面的3个成员变量的属性赋初始值
     public Teacher(String name,int age,double salary) {
         this.name = name; // 设置教师名称
         this.age = age; // 设置教师年龄
         this.salary = salary; // 设置教师工资
     }
 
     //在一个构造器中调用另一个构造器
     public Teacher(){
         This("杜威",98,10000.0)
     }
 
     //当需要返回当前对象的引用时,常常使用return this。
     publicStudent AgeIncrement(){
         age+=2;
         return this;
     }
}
 
publicclassThisDemo{
     public static void main(String[] args) {
         Teacher teacher = new Teacher("王刚",5000.0,45);
         System.out.println("教师信息如下:");
         System.out.println("教师名称:"+teacher.name+"\n教师年龄:"+teacher.age+"\n教师工资:"+teacher.salary);
     }
}
 
用来访问本类的成员方法:this.本类实例方法名
6)super关键字:super是在子类中调用被屏蔽的成员变量和方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class SuperClass {
     int sum, i = 50, j =3;
     int operator(){
         sum=i+j;
         return sum;
     }
}
public class SubClass extends SuperClass {
     int i =100, j=6;
     int operator(){
         sum=i+j;
         return sum;
     }
     public void showMessage() {
         System.out.println("this.i="+this.i+ ",this.j="+this.j+ " ,this.operator() = "+ this.operator() );
         System.out.println("super.i = "+ super.i +",super.j= "+super.j +",super.operator() = "+ super.operator());
     }
}
public class Main {
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         SubClass subObject =new SubClass();
         subObject.showMessage();
     }
}
 

注意

1、 子类拥有父类的特征,而父类没有,父类更通用,子类更具体(特征包括属性和方法,自身的特性,拥有父类没有的)
2、使用extends继承父类,语句格式:class 子类名 extends 父类名{}
3、父类中一般只定义一般属性和方法(这个一般可以理解为是子类共有的,这就是父类更通用,而子类拥有其他的,所以子类更具体)
4、子类中通过super关键字来调用父构造方法
5、在子类中可以继承父类的哪些东西,哪些不可以继承
父类中public、protected修饰的属性和方法可以继承,private修饰的属性和方法不能被继承
6、规则:创建子类对象的时候,首先调用的是父类的无参构造方法创建一个父类对象
7、可以在子类中显示调用父类的有参构造方法
8、如果父类的属性均为private修饰,则可以通过共有的getter、setter方法来调用
有些 编程语言支持 多重继承,即一个子类别可以同时有多个父类别,比如 C++编程语言;而在有些编程语言中,一个子类别只能继承自一个父类别,比如 Java编程语言,这时可以利用 接口来实现与多重继承相似的效果。
现今 面向对象程式设计技巧中, 继承并非以继承类别的“行为”为主,而是继承类别的“型态”,使得元件的型态一致。另外在设计模式中提到一个守则,“ 多用合成,少用继承”,此守则也是用来处理继承无法在执行期动态扩充行为的遗憾。
2、
3.返回顶部
 
4.返回顶部
 
5.返回顶部
1、
2、
 
6.返回顶部
 
warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

猜你喜欢

转载自www.cnblogs.com/storebook/p/13403869.html