Day12 Java学习第十二天--->继承

继承

1.继承的本质是对某一批类的抽象,从而实现对显示世界更好的建模

2.extends的意思是扩展,子类是父类的扩展

3.java中类只有单继承,没有多继承

4.继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖,组合,聚合等

5.继承关系的两个类。一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键子extends来表时

6.子类和父类之间,从意义上讲应该有 is a 的关系

object类

super

方法重写

ctrl+H--->打开一个继承树(继承关系)

super注意点

  1. super调用父类的构造方法,必须在构造方法的第一个

  2. super必须只能出现在子类的方法或者构造方法中

  3. super和this不能同时调用构造方法

VS this:

代表的对象不同:

this:本身调用者这个对象

super:代表父类对象的应用

前提:

this:没继承也可以使用

super:只能在继承条件才可以使用

构造方法:

this():本类的构造

super():父类的构造

Person.java


//Teacher is 人   派生类:子类
public class Person {
       //一个类内部要是什么都不写,它也会存在一个方法

   String name;
   int age;
   public int money = 10000;

   //实例化

   public Person() {
       System.out.println("Person 无参");
  }

   public Person(String name) {
       this.name = name;
  }

   public Person(String name, int age) {
       this.name = name;
       this.age = age;
  }

   public void say(){
       System.out.println("人说了一句话");
  }

   public void print(){
       System.out.println("Person");
  }
}

Student.java


//学生类

//子类继承了父类,就会拥有父类的全部方法
public class Student extends Person{

   //封装大多数情况是针对属性而来的,对方法使用很少

   //属性私有,即使外部去new对象时,也不可以使用了,
   //所以就用提供了一些public操作属性的set()/get()
   //名字
   public String name;
   //学号
   private int id;
   //性别
   private char sex;

   private int age;

   public Student() {
       //隐藏代码,调用父类的无参构造函数
       super();//调用父类的构造器,必须要在子类构造器的第一行
       System.out.println("Student 无参");
  }

   //方法
   //get
   //alt+insert

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public int getId() {
       return id;
  }

   public void setId(int id) {
       this.id = id;
  }

   public char getSex() {
       return sex;
  }

   public void setSex(char sex) {
       this.sex = sex;
  }

   public int getAge() {
       return age;
  }

   public void setAge(int age) {
       if(age>120){
           System.out.println("您设置的年龄过大");
      }else{
           this.age = age;
      }

  }

   //学习()
   //public static void say()
   public  void say(){
       System.out.println("学生说话了");
  }

   public void test(String name){
       System.out.println(name);
       System.out.println(this.name);
       System.out.println(super.name);
  }
   public void print(){
       System.out.println("student");
  }

   public void test1( ){
       print();
       this.print();
       super.print();
  }
}

ApplicationDemo1.java

public class ApplicationDemo1 {
   public static void main(String[] args) {
       Student s1 = new Student();
       s1.say();
//       Person p1 = new Person();
//       p1.say();
//       //s1.money;

//       System.out.println(s1.money);
//       s1.test("CAT");
//       s1.print();
//       s1.test1();
  }
}

重写

重写都是方法的重写和属性无关

有了继承关系以后,父类的引用指向了子类(类之间是可以进行转换,你们有血缘关系,你们是父子)

方法的调用只和左边,定义的数据类型有关(跟右边的类无关)

A a = new A();

a.test();//A

父类引用指向子类

B b = new A();

b.test();//B

静态方法和非静态方法有巨大区别

静态方法与左边有关,与重写无关(静态方法在类的时候就创建了)

Application.java-- 主函数

public class Application{
   public static void main(String[] args) {
       A a = new A();
       a.test();
       B b = new A();
       b.test();
  }
}

A.java-- 父类

class B{
   public static void test(){
       System.out.println("B.test()");
  }
}

B.java-- 子类

class  A extends B{
   public static void test(){
       System.out.println("A.test()");
  }
}

得出结果

A.test()

B.test()

非静态方法与重写有关,重写的关键词是public不可以是private,子类与父类有继承关系,才能重写

Application.java-- 主函数

public class Application{
   public static void main(String[] args) {
       A a = new A();
       a.test();
       B b = new A();
       b.test();
  }
}

A.java-- 父类

class B{
   public  void test(){
       System.out.println("B.test()");
  }
}

B.java-- 子类

class  A extends B{
   public  void test(){
       System.out.println("A.test()");
  }
}

得出结果

A.test()

A.test()

重写的总结

1.重写是需要继承关系的,而且是子类重写父类的方法(重写是针对方法的,而不是针对属性的)

1.1 方法名必须相同

1.2 参数列表必须相同

1.3 修饰符范围可以扩大,但不能缩小public>protected>default>private

1.4 重写抛出的异常,也是有范围的,可以被缩小,不能被扩大 classNotFountException > Exception大

重写:子类方法与父类方法,必须要一致

2.为什么需要重写?

2.1 子类不一定满足父类功能

posted @ 2021-05-27 16:17  长高不是梦  阅读(141)  评论(0)    收藏  举报