博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java学习第四天
阅读量:6224 次
发布时间:2019-06-21

本文共 3423 字,大约阅读时间需要 11 分钟。

hot3.png

类的继承

       类的继承要使用关键字  extends

       实现类的复用,提高效率有两种方法

       1、将一个类当作另一个类的属性(合成/聚合关系)

      
       2、一个类继承另一个类,实现继承的类称为 子类 或者 叫 派生类

而被继承的类称为 父类 ,也叫做 超类 或 基类

 

通过 继承 一个现有的类,可以使用已经定义的类中的方法 和属性

类的方法 和属性可以被继承,但 类的 构造器(方法,函数)不能被继承

关键字super(其实就是父类的一个可变的对象)

           可以访问父类中定义的属性,成员方法  还可以用在子类构造器(方法,函数)

中调用父类的构造器

 

 

/**

 * 构造函数
 *  1、子类new 对象的时候,必须调用父类构造函数
 *  2、如果父类无法提供子类所需要的构造函数,这时会报错
 *   报错现象:
 *    父类自定义带参数的构造函数,而子类使用默认的构造函数(无参数的)
 *   最佳的解法:自定义类时,自定义一个空参数的构造函数(养成习惯)
 *  3、可以通过,super进行调用父类的构造函数,进行初始化父类属性
 *  4、构造函数不能被子类继承
 */

public class Son extends Father {

 
 private String sonField;
 
 public Son(){
  super();  //默认调用这个super空参数的
  
  //第一种赋值方式
  //有弊端,属性值固定
  super.setAge(1);
  super.setFatField("1111");
 }
 
 public Son(String field, int age){
  /*//super();  //默认调用空参的父类构造函数
  super(field, age);  //调用父类的带参数的构造函数*/
  
  //Constructor call must be the first statement in a constructor
  //super 跟this 在构造方法中,只能存在一个
  //原因:super  this 都必须是第一行执行
  //强调一点:此处的this 是调用构造函数
  /*this(field);
  super(age);*/
 }
 
 public Son(String field){
  //super();  //默认调用空参的父类构造函数
  //System.out.println();
  super(field);  //调用父类的带参数的构造函数
  this.sonField = field;
 }
 
 
 

 public static void main(String[] args) {

  /*Son son = new Son();
  System.out.println(son.getAge());
  System.out.println(son.getFatField());*/
  
  System.out.println("----------------------------");
  Son son2 = new Son("2222", 2);
  System.out.println(son2.getAge());
  System.out.println(son2.getFatField());
  
 }
}

---------------------------------------------------------------------------

 

/*

 * 继承属性的知识点:
 * 1、如果父类有某个属性,而子类刚好也一个一模一样的属性,子类访问时,访问的是子类的属性
 * 如果子类没有这个属性,那么访问父类的属性, 这个特性叫:属性隐藏
 * 2、如果子类非得去获取父类的属性,可以通过super去获取,注意super 自能在列的内部使用
 * 3、子类继承父类的属性和方法,但是,无法继承父类private 修饰的方法或属性
 * 4、子类也继承了父类的静态属性
 */
public class Son extends Father{
 private int age = 18;
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public Son() {
  System.out.println("son 的构造方法....");
 }
 
 public static void main(String[] args) {
  //知识点:子类初始化(创建对象)时,首先调用父类的构造器,生成父类对象,
  //然后在进行子类初始化。
  Son son = new Son(); 
  //father中有age ,子类也age 打印 son的age
  System.out.println(son.getAge());  //18
  //father中有age ,子类没有age 打印 father的age
  System.out.println(son.getAge());  //40
  System.out.println(son.fatname);
  
  System.out.println(Son.staticField);
  System.out.println(son.staticField);
  System.out.println(Father.staticField);
 }
}

-----------------------------------------------------------------------

/*
 * 类继承的方法知识点
 * 一、方法的重写
 *  如果父类中有一个方法,而子类中有个一个一模一样的方法,这个时候,我称为方法的重写
 *  重写的条件注意点:
 *  1、方法名一模一样
 *  2、参数列表一模一样
 *  3、返回值一模一样
 *  4、访问控制权限:
 *   1>  如果父类中有个方法,是private 修饰的,而子类刚好也有一个一模一样的方法,
 *    这个时候,不能称为方法的重写,子类的方法,是自定义的方法
 *   2>  如果父类中有个方法,而子类刚好也有一个一模一样的方法,子类的方法,访问权限
 *    必须大于或等于父类的方法的访问权限
 *  5、抛出的异常
 *   子类方法重写,抛出的异常,是父类抛的异常的子类或相同类
 *
 * 二、静态方法
 *  1、子类也可以继承父类的静态方法
 *  2、子类不能重写父类的静态方法
 *
 */
public class Son extends Father {
 
 //方法名不一样,不算重写
 public void info1(){
  System.out.println("Son.info1()");
 }
 
 //参数列表不一样,不算重写,不算重载,因为不在同一个类
 public void info(int a){
  System.out.println("Son.info(a)");
 }
 
 
 
 /*Multiple markers at this line
 - Cannot reduce the visibility of the inherited method from
  Father
 - overrides com.qianfeng.demo6.Father.info*/
 protected double info(){
  System.out.println("Son.info()");
  return 1;
 }
 
 
/*@Override  // overload
 public static void staticMethod(){
  System.out.println("son.staticMethod()");
 }*/
 
 
/*@Override  //java 注解
 private void privateMethod(){
  System.out.println("son.privateMethod()");
 }*/
 
 public static void main(String[] args) {
  Son son = new Son();
  son.info();
  
  Son.staticMethod();
 }
}

 

转载于:https://my.oschina.net/u/2542711/blog/539660

你可能感兴趣的文章
ToRPC:一个双向RPC的Python实现
查看>>
我的友情链接
查看>>
nginx在reload时候报错invalid PID number
查看>>
神经网络和深度学习-第二周神经网络基础-第二节:Logistic回归
查看>>
Myeclipse代码提示及如何设置自动提示
查看>>
c/c++中保留两位有效数字
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
由String类的Split方法所遇到的两个问题
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
windows查看端口占用
查看>>
strongswan ikev2 server on ubuntu 14.04
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
JDBC的事务
查看>>
Io流的概述
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
JS 对象机制深剖——new 运算符
查看>>