封装、继承、多态(java)

一:封装

前言:

封装是面向对象的三大特性之一,指隐藏对象的属性和实现细节,对外提供公共方法访问。

优点:

  • 提高了代码的安全性

  • 提高了代码的复用性

  • 提供了公共的访问方法,简化操作

原则:

  • 把不需要对外提供的内容隐藏起来

  • 把对其隐藏的属性,提供公共方法访问

封装步骤:

  • 使用private修饰成员变量

  • 修饰字段

  • 修饰方法

  • 修饰构造器 注意:如果构造器私有,其他类无法创建该类对象

  • 提供对应的getxxx(),setxxx()方法,使用public修饰

  • 具体使用时,借助对象的setXxx方法给属性赋值,getXxx方法获取属性值

实际上:在封装是按下快捷键alt+shift+s选择Generate Getters and setters他会自己对你写的方法进行封装,不需要手动在敲击代码。(工具:SpringToolSuite4)

修饰符本类本包不同包的子类不同包的无关类
private
default(默认)
protected
public
public class TestCS {
  
	public static void main(String[] args) {
		// 创建Person对象并调用setName和setAge方法设置属性值
        Person person = new Person();
        person.setName("张三");
        person.setAge(18);

        // 调用getName和getAge方法获取属性值并输出
        System.out.println("姓名:" + person.getName());
        System.out.println("年龄:" + person.getAge());		
	}
}
class Person {
    private String name;
    private int age;
  
    //很明显new不出来一个对象,不允许访问
    private Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    private Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //get/set方法
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

代码分析:

上述代码示例中,我们创建了一个名为Person的类。该类拥有两个私有成员变量nameage,它们不能被外部类直接访问。

我们还定义了两个私有构造器,其中一个是无参构造器,另一个是带有参数的构造器。私有构造器的作用是防止其他类直接创建该类的对象,只能通过该类内部的方法来创建对象。

另外,我们还定义了四个私有方法:setNamesetAgegetNamegetAge。这些方法也同样被private修饰,只能在该类内部访问。

通过使用private修饰成员变量、方法和构造器,我们限制了对类内部的访问,并提供了封装的特性。其他类只能通过类提供的公开方法来操作私有成员变量,以实现对类的安全控制和数据隐藏。

二:继承

  1. 类和类之间的关系有很多中,继承就是其中一种关系,除此之外还有依赖、 组合、聚合等。

  2. 继承关系体现的是一种is a 的关系。

  3. 子类继承父类,使用 extends 关键字实现。

  4. Object是所有引用类型的父类

  5. 子类构造器执行之前,会先隐式调用父类无参构造器(super)

// Java只支持单继承不支持多继承
//编译报错,一个类只能有且只有一个父类,不能同时继承俩个父类
public class 博士生 extends 老师,学生 {
}
/*补充一点
A super B   A是父类,B是子类
A sub B     A是子类,B是父类
了解以便以后阅读别人文档你要会看
*/

java支持多层继承 → 也就是子类A继承父类B,父类B继承爷爷类C

注意:子类只能继承父类所有的非私有的成员(含成员方法和成员变量)

优缺点:

        优点:

  • 提高了代码的复用性

  • 提高了代码的维护性

  • 让类与类之间产生了is a的关系,是多态的前提

  • 属于一种强耦合关系。一定不要乱用继承

  • 实际开发应用中,继承一般用在底层开发中

    缺点:
  • 继承是侵入性的

  • 继承让类与类之间产生了联系,增强了类的耦合性

  • 降低了代码的灵活性

package edu.hxu.inherit;
/**
 * 继承   子类构造器一定会调用父类的无参构造器
 * 子类不能继承父类中的构造器,但可以通过super关键字调用父类的构造器
 */
public class TestInherit2 {
	public static void main(String[] args) {
		Dog dog = new Dog();
		dog.name = "狗";
		dog.action();
		
		Cat cat = new Cat();
		cat.name = "猫";
		cat.action();		
	}
}
//父类
//所有的引用类型都默认继承Object
class Animal extends Object{
	public String name;  //抽取共性name
	public Animal() {
		System.out.println("Animal构造器");
	}
}
class Dog extends Animal{  //狗狗子类继承animal父类
	//private String name;
	public void action() {
		System.out.println(name+":汪汪汪");
	}
	public Dog() {
		System.out.println("Dog构造器");
	}
}
class Cat extends Animal{
	//private String name;
	public void action() {
		System.out.println(name+":喵喵喵");
	}
}

三:多态

多态前提:
  • 子类继承父类

  • 子类重写父类中的方法

  • 父类的引用指向子类的对象

多态优缺点:

优点:

  • 提高程序的扩展性,灵活性

  • 提升了程序的可扩展性和可维护性

  • 解耦

    • 通过提供统一的接口来实现解耦的效果,也就是提高了代码的灵活性、可扩展性和可读性,降低了代码的耦合度,使得系统更易于维护和扩展

  • 定义方法的时候,将父类型作为参数,在使用的时候,使用具体的子类型参与操作

    弊端:

  • 不能使用子类的特有成员

// 定义一个动物类
class Animal {
    public void sound() {
        System.out.println("动物发出声音");
    }
}

// 定义一个狗类,继承自动物类
class Dog extends Animal {
    @Override    
    public void sound() {
        System.out.println("汪汪汪");
    }
}

// 定义一个猫类,继承自动物类
class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("喵喵喵");
    }
}

public class PolymorphismExample {
    public static void main(String[] args) {
        Animal animal1 = new Dog(); // 通过父类引用指向子类对象
        Animal animal2 = new Cat(); // 通过父类引用指向子类对象

        animal1.sound(); // 调用子类Dog的sound方法
        animal2.sound(); // 调用子类Cat的sound方法
    }
}

分析:

在这个例子中,动物类是一个父类,狗类和猫类是子类。子类继承了父类的sound方法,并进行了重写。

在主方法中,创建了一个父类引用指向子类对象,这就是多态的体现。无论是animal1还是animal2,都可以调用sound方法。当animal1调用sound方法时,会执行子类Dog的sound方法;当animal2调用sound方法时,会执行子类Cat的sound方法。

这就是多态的好处,可以通过父类引用来调用子类的方法,提高代码的灵活性和可扩展性。

结语:

我也是才开始学习这门语言,不对的地方还请各位热心网友在评论区提出来,我们一起学习!

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值