zoukankan      html  css  js  c++  java
  • Java-继承

    Java 继承

    • 继承是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为

    • 类的继承格式

        class 父类 {
      
        }
      
        class 子类 extends 父类 {
      
        }
      
    • 继承的特性

    1. 子类拥有父类的非private的属性,方法
    2. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
    3. 子类可以用自己的方式实现父类的方法
    4. Java的继承是单继承,但是可以多重继承,单继承就是子类只能继承一个父类,多重继承就是,A继承B,B继承C
    5. 提高了类之间的耦合性

    继承关键字

    • extends关键字,类的继承是单一继承,一个子类只能拥有一个父类,所以extends只能继承一个类

        public class Animal {
        	private String name;
        	private int id;
        	public Animal(String myName, String myId) {
        	// 初始化属性
        	}
        	public void eat() { // 吃东西方法的具体实现}
        	public void sleep() { //睡觉方法的具体实现}
        }
        public class Penguin extends Animal{
      
        }
      
    • implements关键字,使用inplements关键字可以变相的使Java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口间用逗号分隔)

        public interface A {
        	public void eat();
        	public void sleep();
        }
        public interface B {
        	public void show();
        }
        public class C implements A,B {
      
        }
      
    • superthis关键字
      super关键字:通过super关键字实现对父类成员的访问,用来引用当前对象的父类
      this关键字:指向自己的引用

        public class SuperDemo {
        	public static void main(String []args) {
        		new SubClass().showMessage();
        	}
        }
        class SuperClass {
        	int i = 50;
        }
        class SuperClass extends SuperClass {
        	int i = 100;
        	public void showMessage {
        		System.out.printf("super.i = %d,this.i = %d
      ", super.i, this.i);
        	}
        }
      
    • final关键字,把类定义为不能继承的,即最终类;修饰方法,该方法不能被子类重写

        //声明类
        final class 类名 {//类体}
        //声明方法
        修饰符(public/private/default/protected) final 返回值类型 方法名() {//方法体}
        //实例变量也可以被定义为`final`,被定义为`final`的变量不能被修改。被声明为`final`类的方法自动地声明为`final`,但实例变量并不是`final`
      

    构造器

    • 子类不能继承父类的构造器,但是父类的构造器带有参数的,则必须在子类的构造器中显示的通过super关键字调用父类的构造器并配以适当的参数列表

    • 如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器

        class SuperClass {
        	private int n;
        	SuperClass() {
        		System.out.println("SuperClass()");
        	}
        	SuperClass(int n) {
        		System.out.println("SuperClass(int n)");
        		this.n = n;
        	}
        }
        class SubClass extends SuperClass{
        	private int n;
        	SubClass() {
        		super(300);// super语句必须是子类构造方法的第一条语句
        		System.out.println("SubClass");
        	}
      
        	public SubClass(int n) {
        		System.out.println("SubClass(int n):" + n);
        		this.n = n;
        	}
        }
        public class TestSuperSub {
        	public static void main (String args[]) {
        		SubClass sc = new SubClass();
        		SubClass sc2 = new SubClass(200);
        	}
        }
        // SuperClass(int n)
        // SubClass
        // SuperClass()
        // SubClass(int n):200
      

    *java 中若要在子类中调用父类的方法,需使用关键字super

    	class Animal{
    		void go() {
    			System.out.println("animal go");
    		}
    	}
    
    	class Dog extends Animal{
    		void go() {
    		// 调用父类方法
    		super.go();
    		}
    	}
    	//驱动函数
    	public static void main(String [] args) {
    		Dog dog = new Dog();
    		dog.go;
    	}
  • 相关阅读:
    图像有用区域--------深搜和广搜的第一次二选一
    24Pointgame-----24点游戏
    CAP定理和BASE理论
    并查集
    七桥问题和一笔画
    组合数问题--------一种新的 搜索 思路
    最少换乘 之简化版
    吝啬的国度 ---用vector 来构图
    WGZX:javaScript 学习心得--1
    eclipse Maven -->web project
  • 原文地址:https://www.cnblogs.com/yfife/p/7401554.html
Copyright © 2011-2022 走看看