欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java入门(七)

程序员文章站 2022-09-05 22:47:34
面向对象-继承多个类中存在相同属性和行为时,将这些内容抽取道单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可继承的好处:提高了代码的复用性提高了代码的维护性让类与类之间产生了关系,是多态的前提继承的弊端:让类与类之间产生了关系,使得耦合增强了开发原则:高内聚(自己完成某件事的能力),低耦合(类与类的关系)⚠️ Java类中只支持单继承,不支持多继承,可以通过多层继承来实现继承多个类简单的学生类继承人类:public class Student ....

面向对象-继承

多个类中存在相同属性和行为时,将这些内容抽取道单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可

继承的好处

  1. 提高了代码的复用性
  2. 提高了代码的维护性
  3. 让类与类之间产生了关系,是多态的前提

继承的弊端

  1. 让类与类之间产生了关系,使得耦合增强了
  2. 开发原则:高内聚(自己完成某件事的能力),低耦合(类与类的关系)

⚠️  Java类中只支持单继承,不支持多继承,可以通过多层继承来实现继承多个类

简单的学生类继承人类:

public class Student extends Person{
    public void study(){
        System.out.print("study");
    }
}

Java继承中成员变量的特点:成员变量名称相等的时候,在子类方法中访问变量的优先级顺序为就近原则:

  1. 在方法的局部范围找
  2. 在子类的成员范围找
  3. 在父类的成员范围找

 

Super关键字

public class Student extends Person{
    public int age = 20;
    public void printAge(){
        int age = 10;
        System.out.println(age);
        System.out.println(this.age);
        System.out.println(super.age);
    }
}

this代表本类对象的引用而super代表父类的存储空间,也可以理解为代表父类对象的引用

 

继承中的构造方法

子类构造方法继承父类前都会先执行父亲无参构造方法,因为子类继承父类会继承父类的非私有成员,在子类初始化之前,一定要完成父类数据的初始化,⚠️  在子类的构造方法中,默认第一行有一条语句:Super() 如果父类中没有无参构造方法,推荐在父类中手动添加无参构造方法,也可以通过super去访问父类的带参构造方法

继承中成员方法的特点

子类方法和父类方法调用的声明不一样,执行子类中的方法,所以首先在子类中找,没有的化然后再去父类中找

方法重写

子类和父类一样的方法声明的情况

当子类需要父类的功能,而功能主体子类又有自己的特有内容的时候,就考虑使用方法重写,这样既保证了父亲的功能,还添加了子类的特有内容

public class Student extends Person{
    @Override
    public void printAge(){
        System.out.println("20");
        super.printAge();
    }
}

可以用@Override表明该方法是重写父类的方法

⚠️  父类私有方法不能被重写,子类重写父类方法时,访问权限不能更低 private < 默认修饰符 < public, 比如父类用public,子类只能用public,父类用默认修饰符,子类可以用public和默认修饰符

继承练习

通过有参和无参两种方法给学生对象赋值

学生有参构造的时候用super调用父类构造

public class Student extends Person{
    public Student(){}
    public Student(String name, int age){
        super(name, age);
    }
    public void study(){
        System.out.println("study");
    }
}
class hello {
    public static void main(String[] args) {
        Student sc = new Student();
        sc.setName("TIM");
        sc.study();
        System.out.println(sc.getName());

        Student s = new Student("Jerry",20);
        System.out.println(s.getName());
    }
}

 

多态

同一个对象在不同时刻体现出来的不同状体

Java多态的前提

  1. 有继承关系
  2. 有方法重写
  3. 有父类引用指向子类对象

比如Animal a = new Cat();

多态成员访问特点:

成员变量:编译看左边,执行看左边,比如 a.weight 或者 a.age 看的都是 Animal 类中的成员变量

成员方法:编译看左边,执行看右边,比如 a.eat() 用的是 Cat 类的成员方法,但是检查的时候检查Animal类中是否有重写

为什么会这样子呢? 因为成员方法有重写,而变量没有

多态的好处:

提高了程序的扩展性

多态的弊端:

不能使用子类的特有功能

多态中的转型

向上转型:由子到父,父类引用指向子类对象,比如多态中 Animal a = new Cat() 

向下转型:从父到子,父类引用转为子类对象

由于多态的弊端导致了无法访问子类特有的方法,如果这时候 Cat c = new Cat() 虽然可以访问子类特有方法了,但是内存中会存在两个Cat对象,这时候就要想办法把多态的猫还原,就要使用多态的转型了,父类引用转为子类对象

Cat c = (Cat) a;

类型转换内存模型

Java入门(七)

 

本文地址:https://blog.csdn.net/fang19970714/article/details/114266097

相关标签: java