JAVA基础(52)---继承

版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/84111433

Java是一门纯粹的面向对象的编程语言

面向对象有三个基本特征:封装  继承  多态

封装:隐藏实现细节,对外提供公共的访问方法。就是将成员变量(属性)进行私有化,同时对外提供getter和sertter方法,方法和类 也是封装的一种表现形式

继承

类中:属性、类属性 、构造方法、构造代码块、静态代码块、普通方法、静态方法

类与类之间的关系:继承

继承在代码中的体现:extends
例子:    
            人  
                       职业:学生
                                  工人
                                  教师
                      性别:
                                男人
                                女人
                      年龄:
                               未成年人
                               成年人
通过关键字 extends 来使两个类之间产生了关系
产生了继承的关系:
                  student 是 person 的子类/派生类/衍生类
                  person 是 student 的父类/超类           

java中继承的特点

  1. Java中的继承都是单继承,不允许多继承,但是可以允许多重继承。也就是说:一个类只能有一个父类
  2. 一个类只能有一个父类,但是一个类可以有多个子类在继承中,子类都可以继承父类的哪些成员:
  • 子类可以继承父类的非私有的成员属性:不能是private修饰的。区分子类和父类的同名的成员属性:super:代表父类的当前对象
  • 构造方法构造方法不能继承,但是当我们去创建子类对象的时候,会先调用父类的构造方法;在子类的构造方法中,如果要调用父类的构造方法,对共有的属性进行初始化那么就可以使用super()来调用父类的构造方法,但是在使用的时候,必须出现在构造方法的第一句
  • 构造代码块。当我们创建子类对象的时候,也会先执行父类的构造代码块,再执行父类构造方法,再执行子类构造代码块,子类的构造方法
  • 静态代码块。如果创建父类对象,那么就在创建父类对象之前,执行一次父类的静态代码块,在创建子类对象的时候,静态代码块就不在执行了,如果没有创建父类对象,那么在创建子类对象的时候,首先会执行父类的静态代码块,而且只执行一次
  •  普通方法。方法的继承,也是只能继承非私有的方法。当我们去使用子类对象去调用一个方法的时候,首先在子类中找,如果子类中有,则执行子类的方法,如果子类中没有,则去父类中找,如果父类中有,则执行父类的。在同一个类中,如果方法名称相同,则称为重载(需要满足重载要求);在同一个类中,如果出现在继承的两个类中,方法名称相同,则称为重写(覆盖):

               重写的条件:

                               1、存在继承关系的两个类中

                               2、方法的声明必须完全一致(方法的名称和参数列表必须完全相同)

                               3、子类中的重写父类的方法的时候,不能采用比父类更为严格的访问修饰符

              方法重写的作用:

                               对父类中的该方法进行扩展或者重新实现。    

  • 静态方法。从表现形式上来说,静态方法也能继承,但是本质不是继承。对于静态方法不能进行重写
  •  final关键字。可以修饰类、修饰变量、修饰方法。使用final修饰的类不能被继承;使用final修饰的变量只能被赋值一次使用final修饰的方法不能被重写。final的使用场景:

                    1、类不想被继承
                    2、使用final修饰的变量的值,不想被修改。一般情况下,使用final修饰的变量称为常量,而且常量的修饰一般是 static 和 final共同进行修饰
                    3、方法不想被重写

继承的好处

  1. 提高了代码的复用性。多个类相同的成员可以放到同一个类中
  2. 提高了代码的维护性。如果功能的代码需要修改,修改一处即可
  3. 让类与类之间产生了关系,是多态的前提。其实这也是继承的一个弊端:类的耦合性很强。

                                                                      子类是父类的扩展,不是简单的复制

package org.lanqiao.extenddemo2;

public  class Animal {
	public  String name = "小强";
	protected int age;
	int leg;
	public Animal() {
		System.out.println("父类的构造方法");
	}
	public Animal(String name, int age,int leg) {
		
		this.name = name;
		this.age = age;
		this.leg = leg;
	}
	{
		
		System.out.println("父类的构造代码块");
	}
	static{
		
		System.out.println("父类的静态代码块");
	}
	public void showInfo() {
		System.out.println(this.name +"--"+this.age+"--"+this.leg);
		
		
	}
	public final void show() {
		
		System.out.println("父类的普通方法....");
	}
	
	public static void print1() {
		System.out.println("父类的静态方法");
		
	}
	
}

   

package org.lanqiao.extenddemo2;

public class LandAnimal extends Animal {
	public String name ="旺财";
	public int speed;
	public LandAnimal() {
		System.out.println("子类的构造方法");
	}
	public LandAnimal(int speed) {
		this.speed = 20;
		
		
	}
	public LandAnimal(String name, int age,int leg) {
		
		this.name = name;
		this.age = age;
		this.leg = leg;
	}
	public LandAnimal(String name , int age, int leg,int speed) {
		
		//this(name,age,leg);
		super(name,age,leg);
		this.speed = speed;
	}
	{
		System.out.println("子类的构造代码块");
	}
	static{
		
		System.out.println("子类的静态代码块");
	}
	public void printInfo() {
		System.out.println(super.name +"--"+age+"--"+leg);
	}
	@Override
	public void show() {
		
		System.out.println("子类的普通方法");
	}
	@Override
	public String toString() {
		return "LandAnimal [name=" + name + ", speed=" + speed + "]";
	}
	public static void print1() {
		System.out.println("子类的静态方法");
		
	}
	
}

测试代码

package org.lanqiao.extenddemo2;

public class Test {
	public static void main(String[] args) {
		/*Animal a = new Animal();
		a.showInfo();*/
		System.out.println("--------------------");
		LandAnimal la = new LandAnimal();
		la.printInfo();
		LandAnimal la1 = new LandAnimal();
		la1.show();
		System.out.println(la1.toString());
		LandAnimal.print1();
	}
}

猜你喜欢

转载自blog.csdn.net/yj201711/article/details/84111433