Java(14)继承

1.继承(extends)

1.1 继承:遗传

1.2 语法

public class 子类 extends 父类{

public class Dog extends Pet{

}

 1 public class Pet {
 2     private String name = "无名氏";
 3     private int health = 90;
 4     private int love = 0;
 5     public Pet(){
 6         this.health = 95;
 7         System.out.println("执行宠物的无参构造方法");
 8     }
 9     public Pet(String name){
10         this.name = name;
11     }
12     public String getName(){
13         return name;
14     }
15     public int getHealth(){
16         return health;
17     }
18     public int getLove(){
19         return love;
20     }
21     public void ji(){
22         System.out.println("宠物的自白:\n我的名字叫"+this.name+",健康值是"+this.health
23                 +",和主人的亲密度是"+this.love+"。");
24     }
25 }

宠物类

 1 public class Dog extends Pet{
 2     private String strain;
 3     public Dog(String name,String strain){
 4         //super(name);
 5         this.strain = strain;
 6     }
 7     public String getStrain(){
 8         return strain;
 9     }
10     public void ji(){
11         super.ji();
12         System.out.println("我是一只"+this.strain);
13     }
14 }

狗狗类继承宠物类

 1 /*
 2  * 继承语法
 3  * 修饰符 SubClass extends SuperClass{
 4  *         类定义部分
 5  * }
 6  * 继承通过extends关键字来实现,其中SubClass为子类,SuperClass为父类
 7  * 修饰符如果是public,则该类在整个项目中可见,若无public修饰符,则该类只在当前包可见
 8  * 不可以使用private和protected修饰类
 9  */
10 public class Penguin extends Pet {
11     private String sex;
12     //final String home = "南极";
13 //    public void setHome(String home){
14 //        this.home = home; // home不可以再次赋值
15 //    }
16     public Penguin(String name,String sex){
17         super(name);
18         this.sex = sex;
19     }
20     public String getSex(){
21         return sex;
22     }
23     public void ji(){
24         super.ji();
25         System.out.println("性别是:"+this.sex);
26     }
27 }

企鹅类继承宠物类

 1 /*
 2  * 方法的重写
 3  * 在子类中可以根据需求对父类继承的方法进行重新编写
 4  * 要求:重写方法和别重写方法必须具有相同的方法名
 5  * 必须具有相同的参数列表
 6  * 重写方法的返回值类型必须和被重写方法的返回值类型相同
 7  * 重写方法不能缩小被重写方法的访问权限
 8  */
 9 public class TextDPP {
10     public  static void main(String[] args){
11         Pet pet = new Pet("吉吉");
12         pet.ji();
13         Dog dog = new Dog("狗狗","雪狼");
14         dog.ji();
15         Penguin pgn = new Penguin("胖胖","Q妹");
16         pgn.ji();
17     }
18 }

测试类

运行结果为:

1.3 继承的特点

   a.子类可以继承父类的非尸用的属性和方法

  b.不能继承构造方法

  c.继承默认权限修饰符的方法和属性,子类和父类必需在同一包中

1.4 super(父类)

  super.属性名//表示方法父类的属性

  super.方法名(参数);//表示访问父类的方法

  super.(参数);//表示访问父类的构造函数

注意: super()访问父类构造函数时,必须写在第一行

注意:代码块会执行在构造函数之前

2.重写

  2.1 重写就是子类重写定义父类的方法

  2.2 重写规则

    a.方法名和参数列表相同

     b.修饰符访问权限子类和父类相同或者比父类大

    c.返回值类型子类和父类相同(或者是父类返回值类型的子类)

    d.异常跟父类相同或者范围更小

 一般:重写时,子类的东西都要和父类保持一致

构造方法不能被重写

因为不能被继承所以不能被重写

3.抽象类

  3.2.抽象方法

    语法:public abstract 返回值类型 方法名(参数列表);

   例:public abstract void print();

注意:抽象方法有abstract修饰,并且抽象方法没有方法体

1 public class Fish extends Animal{
2     int weight = 5;
3     int age = 9;
4     public void info(){
5         System.out.println("我是一只"+weight+"的鱼!");
6         System.out.println("今年"+age+"岁了!");
7     }
8
9 }

鱼类继承动物类

1 public abstract class Animal {
2         int age;
3         String color = "";
4         int weight;
5         abstract void info(); //抽象这个方法让子类去实现
6 }

动物抽象类

1 public class Bird extends Animal{
2     String color="红色";
3     int age = 4;
4     public void info(){
5         System.out.println("我是一只"+color+"的鸟!");
6         System.out.println("今年"+age+"岁了!");
7     }
8
9 }

鸟类继承动物类

1 public class TextBFA {
2     public static void main(String[] args){
3         Bird b= new Bird();
4         b.info();
5         Fish f = new Fish();
6         f.info();
7     }
8 }

测试类

运行结果为:

4.抽象类和抽象方法的特点

  a.都用abstract修饰

  b.抽象类不能实例化

  并且继承抽象类的子类都必须重写抽象类的所有抽象方法

注意:1)抽象类中不一定有抽象方法

2)含有抽象方法中的类,一定是抽象类(接口)

时间: 2024-10-12 14:57:31

Java(14)继承的相关文章

Java中继承,类的高级概念的知识点

1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩展父类的属性和方法 C.父类的属性和方法可用于子类 D.设计应用程序变得更加简单 3. 如何判断类具有继承关系? 类与类的关系:  a. has—a(组合关系) b. is—a(继承关系) 4. Java中继承的实现(关键字:extends)   关键字extends出现在类声明时的类名后,exte

java中单继承,多接口的实现及一些注意事项

java中一个类的直接父类只能有一个,但可以实现多个接口. 1 package javaKeyTechnology; 2 /** 3 * java中单继承,多接口. 4 * 一个类的直接父类只能有一个,但可以同时实现多个接口. 5 */ 6 class Fath{ 7 int age; 8 Fath(int age){ 9 this.age = age; 10 System.out.println("I am Father"); 11 } 12 } 13 14 interface Li

Java的继承与多态

Java的继承与多态对于提高开发效率,减少开发量,是非常有帮助的,也便于代码维护.下面是根据书上讲的,我又做了改进的例子. 假设需求: 公司需要对所有人员进行管理,所有人员分为普通员工和经理人,他们的头衔.工资.生日等信息都是不一样的,但是不能开发两套系统分别进行管理,而是要一套系统完成对所有人的管理. 设计一个员工类,这是父类,定义如下: package com.myHelloWorld; import java.text.ParseException; import java.text.Si

java基础-继承

一个由其他类继承的类叫子类(也叫继承类,扩展类等),该类继承的类叫父类或超类.除了Object类意外,所有的类都有切仅有一个父类,如果一个类没有用extends关键词声明父类,则该类隐含继承Object类,因此如果一个类继承另外一个父类,而该父类可能又是继承的另外一个类,最终的起点在Object类. java中继承的概念简单而强大,当你需要定义的一个类中的许多代码已经在另外一个类中存在时,我们就可以选择定义时继承该类,这样免去许多书写和调试的麻烦,子类能够继承父类的字段,方法和嵌套类,即类成员,

java类继承总结一 父类类型与子类类型之间的转化问题(转)

java类继承总结一 父类类型与子类类型之间的转化问题 本文将通过一个实例描述父类类型与子类类型之间的转化问题,这个很特殊的问题常常会导致一些潜在的危险,让你整整一个晚上都在调试程序以解决一个让人抓狂的java.lang.ArrayStoreException异常. 1. 子类数组的引用可以装换为超类数组的引用 2. 子类的引用child可以转换为父类的引用parent(这里假设parent是父类对象,child是子类对象),但却不可以通过 parent调用child的特有方法 class Em

关于Java中继承和接口的理解

关于Java中继承和接口的理解 Java语言中,为了实现代码重用,设计了继承这一机制,但是,其设计成单继承,这样设计是有原因的,如下图: Figure1:deadly diamond of death 此图问题称为菱形问题(diamond problem),就是说,当A的子类B和C同时实现了A中的方法,则同时继承了B和C的子类D在调用该方法时会出现混乱,无法得知该调用哪一个方法. 既然不能实现多继承,我们就会考虑把很多方法就写在父类里,或者继承抽象类,实现其方法,但是,这样会导致一个问题,比如说

Java面向对象㈡ -- 继承与多态

Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆盖的概念.覆盖被用来支持多态.实际开发中Java通常继承于抽象类,实现于接口.如果不希望一个类被继承,或者一个方法被覆盖,或者一个成员变量被改变,就可以用final修饰.这里只说明两个问题:1,重载和覆盖的区别重载和覆盖的区别:重载发生在同一个类之中,重载要求函数名相同,参数不同(参数个数||参数类

Java多态-继承与清理

通过组合和继承方法来创建新类时,永远不必担心对象的清理问题,子对象通常会留给垃圾回收器进行处理.如果确是遇到清理问题,那必须用心为新的类创建dispose()方法(在这里我们选用此名).并且由于继承的缘故,如果我们有其他作为垃圾回收一部分的特殊清理动作,就必须在导出类中覆盖被继承的dispose()方法.当覆盖被继承的diopose()方法时,务必记住调用基类版本dispose()方法:否则,基类的清理动作就不会发生.下例便是一个证明: package polymorphism; class C

Java方法继承、方法重载、方法覆盖小总结

转自:http://blog.csdn.net/cdsnmdl/article/details/3968688 ———————————————————————————————————— 1.方法继承:利用extends关键字一个方法继承另一个方法,而且只能直接继承一个类. 当Sub类和Base类在同一个包时Sub类继承Base类中的public/protected/默认级别的变量个方法 在不同包时继承public/protected级别的变量和方法. 2.方法重载:如果有两个方法的方法名相同,但