zoukankan      html  css  js  c++  java
  • Java学习笔记-继承

    继承

    1.继承的作用:

    • 基本作用:子类继承父类
    • 主要(重要)作用:因为有了继承,才有了方法覆盖和多态

    2.继承的特性:

    • java只支持多继承,但是支持间接继承
    • 子类继承父类,除构造方法不能继承之外,剩下都可以继承,但是私有的属性无法在子类中直接访问,可以通过间接的手段访问
      • 这种继承:子类继承父类的方法,是将父类继承过来的方法归为自己所有,那么子类调用时不是父类的方法,而是它自己的方法。
    • 如果一个类没有显示的继承任何类,则默认继承Object类(Java继承树的根)

    3.什么时候继承?

    • 凡是采用“is a”能描述的,都可以继承
    • 在考虑两个类继承之前,先考虑两个类组合的效果
      • 例如: cat is Animal Dog is Animal

    4.继承的缺点:
    耦合度高,父类修改,子类受牵连

    例如:

    //如下将Student,Teacher泛化为Person类:
    public class Person{
        private String name;
        private int age;
        public Person(String name, int age){
            this.name = name;
            this.age = age;
        }
    	//置取方法
    	public void setName(String name){
    		this.name = name;
    	}
    	public String getName(void){
    		return this.name;
    	}
    	
        public void display(){
            System.out.println("姓名:" + name);
        }
    }
    
    
    Student类:
    public class Student extends Person{
        private double grade;
    
    	public Student(String name, int age, double grade){
            super(name, age);
            this.grade = grade;
        }
        public void display(){
            System.out.println("成绩: " + this.grade);
        }
    }
    
    
    public class ExtendsTest01{
    	public static void main(String[] args){
    		Student s = new Student("Li Si", 23, 100);
                    //getName()是子类从父类继承过来的方法
    		System.out.println("姓名:" + s.getName())
    	}
    }
    

    分析Java源码中的继承

    /** 
    * Object.java中
        public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    */
    public class ExtendsTest02{
    	public static void main(String[] args){
    		//创建一个对象
                    ExtendsTest02 ts = new ExtendsTest02();
    		String retValue = ts.toString();
    		System.out.println(retValue);
    		//如果直接输出"引用"?
    		System.out.println(ts);
    		
    	}
    }
    

    分析:

    1. ExtendsTest02类默认继承Object类,所以是子类对象调用父类的实例方法。
    2. 输出结果"等同"看作调用对象在堆内存中的地址,是实际地址经过“哈希算法”计算出的十六进制地址
    3. 如果直接输出"引用"
    • println方法会先自动调用“引用.toString()”
    • 然后输出toString()方法的结果

    System.out.println

    public class Test{
    	//静态变量
    	static Student s = new Student();
    	
    	//入口
    	public static void main(String[] args){
    		//System.out.println("Hello");
    		//一样的结构
    		Test.s.exam();
    	}
    }
    class Student{
    	//实例方法
    	public void exam(void){
    		System.out.println("考试....");
    	}
    	
    }
    
  • 相关阅读:
    浏览器返回错误汇总分析
    黄金投资品种众多 个人如何投资黄金
    .NET设计模式系列文章 (转自TerryLee's Tech Space)
    .NET设计模式(7):创建型模式专题总结(Creational Pattern)
    一个很经典的下拉式菜单(附效果)
    .NET设计模式(16):模版方法(Template Method)
    搜索引擎优化基础(转并整理添加)
    .NET设计模式(18):迭代器模式(Iterator Pattern)
    【ASP.NET】网页中嵌入视频的三种方法
    .NET设计模式(15):结构型模式专题总结
  • 原文地址:https://www.cnblogs.com/zy200128/p/12634397.html
Copyright © 2011-2022 走看看