类的继承



 类的继承

一 对于类的继承的理解

         当多个类与一个类有公用的属性和方法时,需要用到类的继承。

         在日常生活中,父类与子类通常有这样的关系:

         子类属于父类更细的分支。例如:手机与智能手机...

         子类与父类有传承的关系。例如:iPhone5 与iPhone6...

 

二:类的继承具体的使用方法:

      

       1.关键字:extends
       2.格式:
        public class 类名(子类、派生类、超类) extends 类名 (父类、基类){
   
        }
 

       3. Java中类的继承是单继承:一个或多个子类只能继承一个父类。

        大笑一个爸爸可以有多个孩子,一个孩子不能有多个亲生爸爸。
 
       
       4.子类继承到了父类的什么内容:大笑外形和行为
 

               (1).继承的内容
                        父类中所有的(public private 默认的 protected)属性和方法都被子类继承到了。
  
               (2).调用的内容
                        公有的,默认的,受保护的属性和方法都可以被子类调用,private间接调用
    

                                                    同类   同包      不同包
                                   private      可以   不可以  不可以
                                    默认的     可以    可以      不可以
                                    protected 可以    可以    (有继承关系可以调用,没有继承关系不可以)
                                    public       可以    可以      可以
 
                       如果父类有一个有参的构造方法,子类须用super.调用
                       访问修饰符 子类名(参数类型,参数值,,,)
                       super(参数类型,参数名,,,) 
                       super.方法名

 

 三:方法重写
 

               1.生活中什么情况需要方法重写
                 父类子类有相同的方法,但具体的实现不同。
                         大笑一代更比一代强
 

                 2.方法重写的条件
  

              (1)必须要存在继承关系。
              (2) 子类中方法的访问修饰符,返回值类型,方法名,参数个数,参数类型,参数顺序必须要和父类的完全一致。
              (3)子类重写方法的访问修饰符可以大于或者等于父类方法的访问修饰符。
              (4)代码不同
  !私有的方法是不能重写。
  
                 3.方法重写后如何调用:根据实例化的对象,决定调用的方法。
                 创建的对象是子类的对象,那么会优先调用子类的方法,如果子类没有才会调用父类的方法。
  
四.自动转型

  
                1.自动转型的条件
             (1).必须要存在存在继承关系。
             (2)只能是子类的对象转型为父类的对象。
 
               2.自动转型如何实现

               父类 对象名 = new 子类 
  
 五.多态
 多态是由Java的方法重载,继承,方法重写,自动转型这些技术组合而成的一个特性。

 

练习:以下场景为:火车改变运行航线。其中包括:类的继承、方法重写、自动转型。
public class Manager {

               public static void main(String[] args) {

               People p =new People();
               p.setName("某某");
               Transport tr=new Transport("t567",1);
               Train tr1 =new Train("K900",15);
               Transport tr2=new Train("G543",6);
    
                 p.take(tr); 
                 p.take(tr1); 
                 p.take(tr2);
                    }
                           }

public class People {
               private String name;
               public void setName(String name){
               this.name=name;
  
                       }
               public String getName(){
               return name;
                        }
                public void take(Transport tr){
                tr.travel(this);
                         }

                                   }
public class Train extends Transport{
                 public Train (String name,int time){
                 super(name,time);
  
                              }
                   //重写学习方法
                   public void travel(People p){
                   System.out.println(p.getName()+"乘坐的"+getName()+"改变了路线!");
                              }
                  public class Transport {
                  //设置运输工具的名字
                  public String name;
                   //设置运行时间
                   public int time;
                   public Transport (String name,int time){
                   this.name=name;
                   this.time = time;
  
                               }
                   public void setName(String name){
                   this.name=name;
  
                             }
                    protected String getName(){
                    return name;
  
                             }
                      void setTime(int time){
                      this.time=time;
  
                               }
                       protected int getTime(){
                      return time;
                                    }
                            public void travel(People p){
  System.out.println(p.getName()+"乘坐的是"+name+"号,正在运行中,它的旅行时间为:"+time+"小时。");
  
                                         }
                                                      }

 

 

运行结果;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值