java第七天(构造方法、封装、静态、继承、super与this的区别)

一、构造方法

public class Animal{
	//无参构造方法
	public Animal(){
	}
	//有参构造方法
	public Animal(String name){
		this.name = name;
	}
}

定义:与类同名,没有返回值类型

什么调用:new 用来调用构造方法 (换句话实例化对象的时候调用构造方法)

构造方法允许重载

构造方法重载有什么好处:创建对象的时候灵活性更好

构造方法的特点

如果开发人员不提供构造方法,那么编译器会自动添加一个无参构造方法;

但是如果程序中已经提供了构造方法,那么编译器编译过程中就不会再提供构造方法了。

this:指代当前对象。用来区分成员变量和局部变量的同名情况。this.成员变量

注意事项

  1. 如果你不提供构造方法,系统会给出无参数构造方法。
  2. 如果你提供了构造方法,系统将不再提供无参数构造方法。
  3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数

二、封装

原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问

封装:private私有化成员属性,提供公开public的getter/setter

Getter:取值

Setter:赋值

在哪儿用:在构造方法中初始化属性值的用!!!!!或者对象名.set/get()进行使用!!!

好处:隐藏内部实现细节,保证代码的安全,同时也可以提升数据的安全性

访问修饰符,从访问的范围由小及大依次是:private default protected public

访问修饰符的作用:可以修饰类、接口、属性和方法。通常可以通过访问修饰符来改变所修饰对象的可访问范围。
在这里插入图片描述

public class Animal {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void show(){
        System.out.println("我是一只"+this.name+","+this.age+"岁了!");
    }
}
//测试类
public class AnimalTest {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.setAge(12);
        animal.setName("狼狗");
        animal.show();
    }
}

控制台输出:

我是一只狼狗,12岁了!

三、static关键字的应用

作用:实现一个类的所有对象共享数据

可以修饰代码块、方法、变量、常量

静态代码块:类加载时执行,只会执行一次

静态方法的调用:同一个类中,静态方法只能调用静态方法和静态变量,不同类中,使用类名.方法名()

静态变量的调用:同一个中,静态方法直接使用静态变量,不同类中,类名.静态变量名

静态变量实例变量区别

静态变量属于类,被当前类的所有对象共享。

实例变量属于对象,不存在共享

静态方法实例方法区别

静态方法属于类,被当前类的所有对象共享。

实例方法属于对象,不存在共享

适用场景:做工具类

四、继承

在这里插入图片描述
定义

继承 :就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为

好处

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

OOP三大特征:封装、继承、多态

继承的概念:提供的一种子类沿用父类通用行为和属性的编码方式

继承的优势:减少代码冗余,进而可以提升代码的可维护性,提升代码可扩展性

继承的实现方式:extends

建议使用的访问修饰符:protected

继承的特点:1、传递性 2、单根性(一个子类有且仅有一个父类)、

继承描述关系:son extends father, son is a father

哪些内容不可以继承

1、子类不能继承父类的构造方法

2、当父类中不存在空参构造方法,那么子类必须显式调用父类构造方法

子类不能继承父类的private修饰的内容(私有的属性和方法)

重写:一般发生继承里面。

特点:发生在父子类之间,方法名称相同参数列表相同返回值类型相同 override、访问修饰符子类不能比父类小

五、super与this的区别

super :代表父类的存储空间标识(可以理解为父亲的引用)。

this :代表当前对象的引用(谁调用就代表谁)。

访问成员

this.成员变量     ‐‐    本类的   
super.成员变量     ‐‐    父类的  
this.成员方法名()   ‐‐    本类的      
super.成员方法名()   ‐‐    父类的
class Animal {
    public void eat() {
        System.out.println("animal : eat");
    }
}
class Cat extends Animal {
    public void eat() {
        System.out.println("cat : eat");
    }
    public void eatTest() {
        this.eat();   // this  调用本类的方法
        super.eat();  // super 调用父类的方法
    }
}
public class ExtendsDemo08 {
    public static void main(String[] args) {
        Animal a = new Animal();
        a.eat();
        Cat c = new Cat();
        c.eatTest();
    }
}
输出结果为:
animal : eat
cat : eat
animal : eat

访问构造方法

this(…) ‐‐ 本类的构造方法

super(…) ‐‐ 父类的构造方法

子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。

super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。

猜你喜欢

转载自blog.csdn.net/weixin_43951534/article/details/88675430