继承:
  面向对象的三大特征之一:
  
  是类和类之间的一种拓展关系,是一种从一般到特殊的关系;
  
  格式: sub   extends Super,  我们把sub称为子类或者拓展类, 把super称为父类或者基类(超类)
  
 泛化: 把子类中的共性抽取到父类的过程;
 特化: 子类在父类的基础之上,拓展自己特有的状态和特征;
  
  Object: 是所有类的直接父类后间接父类;
  
  
  class  Student{} 等价于  class  Student extends Object{}
  
  直接父类:  直接继承的父类,有且只有一个,也就是说Java只支持单继承;
  间接父类: 直接父类或间接的父类的父类;
  
 方法和字段:
  private 修饰的成员不能被继承;
  默认访问权限的成员能不能被继承?  要是在同一个包中就能被继承
  protected 修饰的成员,可以被继承;
  public 修饰的成员,可以被继承;
  
  构造方法能不能被继承? 不能
  
  class Person{
   
   public Person(){}
  }
  
  class Student extends Person
  {
   //public Person(){}//ERROR
  }
  
  若父类所有的构造方法是用 private 修饰,不能有子类;
  
 
 子类实例化:
  子类初始化,会先默认调用父类的一个无参的构造方法,自己再初始化;
  
  子类的构造方法里,有一个隐式的 super();
  
  若我们显示的让子类去调用父类有参数的构造方法,默认的隐式的构造方法就不会被调用了;
  
  子类对象创建之前,必须有一个父类对象;
  
  
 方法覆写:
   当父类的某一个方法不适合子类对象的时候,就应当重新修改方法体;
   
  遵循的原则:  一同 两小 一大:
  
  一同: 方法签名相同
  两小: 
   1.返回值类型可以是父类返回值类型的子类或相同;
    父类的:Object show(){
     return null;
    }
    
    子类的:  String show()
    {
     return null;
    }
   2.异常更小
  一大: 子类方法的访问权限 >= 父类方法的访问权限
    父类的: private Object show(){
     return null;
    }
    
    子类的:  String show()
    {
     return null;
    }
  
   上面这个不是覆写:因为私有成员不能被继承
  
 必杀技:  若子类方法是覆写方法的话,  那么在方法上加上 @Override  是可以编译通过的;
 
  静态方法能不能被覆写: 不能!
   
   方法的覆写:属于多态,而多态是基于对象的(父类的一个变量指向子类的一个对象);
   
   而静态方法不属于对象,属于类;
 
 super:
  用在子类.,
  super:表示父类对象
  用于调用父类的方法或字段,用法和this一模一样
  
  调用父类的构造方法:
  
  super(参数);和this(参数);
  都表示在构造方法里调用构造方法;都必须写在构造方法的第一行
  
  不同:  this(参数),调用的当前类里面的构造方法,super(参数),调用的是直接父类里构造方法
   
 多态:
 
  面向对象的三大特征之一:
  
  Person  p = new Student();
  
  p的真正类型是学生;当是我们只把他当一般人看待;
  
  编译类型: 申明变量的类型  Person ,  是我们把它当做什么
  运行类型: 创建对象的类型  Student ,  是对象真正的类型
  
  多态的产生前提:继承
  当编译类型和运行类型不一致的时候,就会产生多态;
  
  多态定义:  同一个实体有多种形态;
  
  多态的作用: 可以屏蔽不同子类对象之间的差异,从而能写出更加通用的代码,能提高效率,维护性;
  
 引用类型转换:
  
  向上转型:  小->大, 自动转换, 这里说的小和大,说的是 继承关系中的子类和父类.
    
   可以把子类对象赋给父类变量;
   Person  p = new Student();
   
   Object类是所有类的父类.那么Object类型的变量能不能接受一切值? 可以!
  
   
  向下转型: 大 -> 小
  
   父类对象强制转换成子类对象;
   
   Student  s = (Student)p;
   
   一般的,再强转之前,要先判断该对象时候属于这个类类型;
    boolean b = 对象 instanceof 类
    
    对象的类型和类必须有继承关系;
   
   先判断 p是否是学生类型: 
   
   if(p instanceof Student)
   {
    Student  s = (Student)p;
   }
   
 多态方法调用:
  
  
  1.调用的方法不是覆写方法,子类有,父类没有;
   
  2.调用的方法是覆写的方法,父类有,子类也有;
  
  class Dog
  {
   public void eat()
   {
    System.out.println("0001");
   }
  }

class Hasiqi extends Dog
  {
   public void eat()
   {
    System.out.println("0002");
   }
  }

class ZangDog extends Dog
  {
   public void eat()
   {
    System.out.println("0003");
   }
  }

class Zoo
  {
   public void feed(Dog d)
   {
    d.eat();
   }
  }

class  DogDemo
  {
   public static void main(String[] args)
   {
    Zoo zoo=new Zoo();
    Hasiqi xiaoha=new Hasiqi();
    zoo.feed(xiaoha);

ZangDog zd=new ZangDog();
    zoo.feed(zd);
   }
  }
 
 组合:
   extends  继承是一种从一般到特殊的关系,  也就是说 子类是父类的一种特殊情况;
  
   子类 is  父类的一种  is  A 关系
   
  组合,包含:  比如手机和手机卡,  手机里有手机卡 ,has  A关系
  
  class Card
  {
   private String num;//卡号

public String getNum()
   {
    return num;
   }

public void setNum(String num)
   {
    this.num=num;
   }

public Card(String num)
   {
    this.num=num;
   }
  }

//手机
  class CellPhone
  {
   private Card c;//卡是手机所包含的

public CellPhone(Card c)
   {
    this.c=c;
   }

public void connectied(String num) //联系
   {
    System.out.println(c.getNum()+"正在给"+num);
   }
  }

//人
  class Person
  {
   public void call(CellPhone c,String num)
   {
    c.connectied(num);
   }
  }

class PhoneDemo
  {
   public static void main(String[] args)
   {
    Person lucy=new Person();
    Person will=new Person();
    Card c=new Card("18720076967");

CellPhone iphone=new CellPhone(c);
    lucy.call(iphone,"10086");
   }
  }

Java继承,多态,组合应用的更多相关文章

  1. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  2. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  3. java继承多态和抽象类接口

    一.继承 通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类.已有的称为父类,新的类称为子类(父类派生子类,子类继承父类).(1)继承的优点:    ①代码的可重用性:    ②父类的属性 ...

  4. 学习博客之Java继承多态接口

    这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...

  5. java 继承多态的一些理解不和不理解

    1.向上转型的一个误区 一直以为Child 继承Parent以后, Parent p = new Child();  p可以调用Child类中拓展Parent的方法,原来必须在强制转换成Child类才 ...

  6. Java继承和组合

    为了保证父类有良好的封装性,不会被子类随意修改,设计父类通常应该遵循以下规则: 1.尽量隐藏父类的内部数据,尽量把父类的所有成员变量设置为 private 访问类型,不要让子类直接访问父类的成员变量: ...

  7. java 继承多态的一些理解和不理解

    1.向上转型的一个误区 一直以为Child 继承Parent以后, Parent p = new Child();  p可以调用Child类中拓展Parent的方法,原来必须在强制转换成Child类才 ...

  8. java继承,多态

    子类继承父类,用父类去接收子类,其实我觉得用父类,子类来形容继承关系是不恰当的,比如再发生多态的时候,Car c = new W();w是大众,你能说Car 和W是父子关系吗,我觉得用所属关系类描述可 ...

  9. java 继承还是组合

    1.我真的需要上溯转型(upcasting)吗? 如果是,才会用到继承. 2.

  10. Java继承多态

    一. 父类引用指向子类对象父类名(接口名) 对象名=new 子类(接口)名称() 二. 父子继承关系中,成员变量重名1.直接通过子类对象访问成员变量 =左边是谁,就优先用谁2.间接通过成员方法访问成员 ...

随机推荐

  1. 用Python向MySQL数据库插入数据

    最近一直在学习MySQL数据库,很感兴趣.这次我做了一个简单的尝试,使用Python3.4与MySQL数据库进行交互,将一份从雪球网上下载的某股票数据上传至MySQL数据库.仅为初学者提供参考,高手请 ...

  2. Appium的安装

    APPium的官网地址为:http://appium.io,在官网可以看到安装步骤如下:

  3. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  4. korn shell

    "$*" is a single string that consists of all of the positional parameters "$@"   ...

  5. 本地新建项目提交到github

    1.在github上创建项目(可以添加README.md),创建后的地址为 https://github.com/xxx/xxx-demo.git 2.在eclipse上新建个quick-start的 ...

  6. [python实现设计模式]-1. 单例模式

    设计模式中,最简单的一个就是 “单例模式”, 那么首先,就实现一下单例模式. 那么根据个人的理解,很快就写出第一版. # -*- coding: utf-8 -*- class Singleton(o ...

  7. MyEclipse 激活

    2014版,需要注意的几个问题: 1.安装路径不要有空格: 2.输入usercode-systemid-tools rebyild-active-tools replace-tools-save; 3 ...

  8. Ultra Video Splitter & Converter

    1. Video Splitter http://www.aone-soft.com/splitter.htm Ultra Video Splitter 是一款视频分割工具.可将一个巨大的AVI/Di ...

  9. WCF框架处理流程初探

    拜读了大牛蒋金楠的<WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构>,写点心得. (原文:http://www.cnblogs.com/artech/archive/20 ...

  10. java路径问题

    使用了java这么久一直对java获取路径存在困惑,将一些常用的获取路径方式记录如下: val property = System.getProperty("user.dir")) ...