面向对象的三大特征--继承

1概念

可以让一个类继承另一个类,此时该类会继承另一个类中的属性和方法

去继承的类称为子类,被继承的类称为父类(超类/ 基类)

继承是一种 is a 的关系 cat is a animal user is a person

2 实现方法

语法:

public  class 子类   extends  父类{
    
}

作用:

  • 代码复用: 将多个子类中相同的属性和方法 定义到父类中
  • 功能扩展: 子类可以有自己独特的属性和方法

特性:

  • java中只支持单继承。 但支持多层继承,继承的传递
  • java中所有的类都直接或者是间接的继承了 java.lang.Object类 (后面会讲)
    Object类是所有类的父类 ,每个类都会继承 Object类中的方法
    3 继承的范围

子类可以继承父类的哪些成员

  • 父类中用 public protected 默认 修饰的属性和方法,都可以继承 (同包的情况下)
  • 父类中private 修饰的属性和方法不能被子类继承
  • 父类的构造方法不能被子类继承( 构造方法 名必须与类名相同,而子类名称不可能与父类名称相同)
package Test0324;

public class Test_子类继承 {
    public static void main(String[] args) {
    PrimaryStudent s=new PrimaryStudent();
    s.show();
    }
}
class Student {
    String name = "tom";
    int age = 0;
    String sex = "男";

   public void show(){
       System.out.println(name+age+sex);
    }
}
class PrimaryStudent extends Student{

}
class MiddleStudent extends Student{

}
package Test0324;

public class Test_继承传递 {
    public static void main(String[] args) {
//A总共有三个方法。b();.c();方法来自于继承 a();源自本身
        A a = new A();
        a.a();
        a.b();
        a.c();
    }
}
class A extends B{
    public void a(){
        System.out.println("A中方法");
    }
}
class B extends C{
    public void b(){
        System.out.println("B中方法");
    }
}
class C{
    public void c(){
        System.out.println("C中方法");
    }
}

3 继承的范围

子类可以继承父类的哪些成员

  • 父类中用 public protected 默认 修饰的属性和方法,都可以继承 (同包的情况下)
  • 父类中private 修饰的属性和方法不能被子类继承
  • 父类的构造方法不能被子类继承( 构造方法 名必须与类名相同,而子类名称不可能与父类名称相同)

4构造方法的调用

调用过程:

  • 创建子类对象时,会自动调用父类无参的构造方法(此时必须保证父类中有无参的构造,否则子类会报错——有参的构造方法的类系统不会自动创建无参的方法)
  • 从子类 开始,依次往上调用父类的构造方法,直到Object类,然后在会到子类中,执行后续的代码
package Test0324;

public class Test_构造方法的调用 {
    public static void main(String[] args) {
        pig p = new pig();
    }
}
class Live{
    public Live() {
        System.out.println("父父类");
    }
}
class Animal extends Live{
    public Animal() {
        System.out.println("父类方法");
    }
}
class  pig extends Animal{
    public pig() {
        System.out.println("子类方法");
    }
}

super关键字:

  • 表示父类的对象,只能在子类中使用
  • 可以使用 super() 调用父类的构造方法 ,位于第一行
  • 可以使用 super.xxx 访问父类的属性和方法。解决父类和子类属性同名的问题
package javaSE08_面向对象的特征;

public class Test05_构造方法的调用 {
	public static void main(String[] args) {
		//创建子类时 父类的构造方法也会被调用
		Pig p = new Pig();
		p.show();
	}
}

//父父类
class Live{

	public Live() {
		System.out.println("父父类");
	}
	
	
}
// 父类
class Animal extends Live{
    String name="八戒";
    String sex;
	public Animal() {
		System.out.println("父类");
	}
	public Animal(String name, String sex) {
		super();
		this.name = name;
		this.sex = sex;
	}
	
	public void show (){
		System.out.println("父类中的show方法");
	}
}
//子类
class Pig extends Animal{
	int age;
	double weight;
	String name = "猪刚鬣"; //与父类的同名变量
	
	//构造方法给 name  sex  age  weight 都赋值
	public Pig(String name,String sex,int age,double weight){
//		this.name = name;
//		this.sex = sex;
		super(name,sex);// 调用父类中的构造方法,为 name ,sex属性赋值
		this.age=age;
		this.weight = weight;
		
	}

	public Pig() {
		System.out.println("子类");
	}
	
	public void show(){
		System.out.println("子类中的show方法");
		System.out.println(name);// 子类中name
		// super 表示父类对象
		System.out.println(super.name);// 访问 父类中的name
		
		super.show();// 调用的是父类的show方法
	}
	
}

2.5方法的重写

子类中的方法,与父类中的方法名称,参数,返回类型都一样,我们就说子类重写了父类的方法,称为为方法重写 override

  • 在父子类
  • 返回类型可以相同 也可以是子类类型
  • 访问修饰符不能缩小

作用:用来重写定义子类的行为,解决父类和子类的差异性

面试: 方法重写和方法重载

鼠标左击以确定代码插入的位置,使用快捷键CTRL+O,会弹出窗口让选择某个方法

  • 在父子类
  • 返回类型可以相同 也可以是子类类型
  • 访问修饰符不能缩小

作用:用来重写定义子类的行为,解决父类和子类的差异性

面试: 方法重写和方法重载
重写是指参数和方法名相同
重载是参数不同方法名相同

package Test0324;

public class Test_方法重写 {

}
class Pet{
    public void cry(){
        System.out.println("我是一只宠物会叫");
    }
    public Pet getPet(){
        System.out.println();
        Pet p = new Pet();
        return p;
    }
  }
  class Dog extends Pet{
      @Override
      public void cry() {
          System.out.println("我是一只小猫会喵喵叫");
      }

      @Override
      public Pet getPet() {
          Dog d = new Dog();
          return d;//可以返回子类
      }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值