【面向对象编程——封装、继承】

1 篇文章 0 订阅
1 篇文章 0 订阅
本文详细介绍了Java中的包管理,包括导入、静态导入和访问权限控制,强调了合理使用访问权限的重要性。接着讲解了封装的概念,通过private、default、protected和public关键字实现数据隐藏和信息安全性。最后探讨了继承的概念,举例说明如何通过继承减少代码冗余,同时阐述了继承的规则和注意事项。文章以Animal、Bird和Cat类为例,展示了如何通过继承实现代码复用。
摘要由CSDN通过智能技术生成

一、包

包是组织类的一种方式
目的:为了保证类的唯一性,解决类同名的问题

1.导入包中的类

用import关键字导入包中的某一具体的类

java.util.Date data = new java.util.Data();
//得到一个毫秒级别的时间戳

意为导入java.util这个包中的Data类,但是比较麻烦
我们可以使用import关键字导入包中的类

import java.util.Data;
public class Test{
  public static void main (String[] args) {
     Data data = new Data();  
  }
}

如果需要用到java.util中其他的类,可以使用import java.util.*
但是建议制定要导入的类名,否则还是容易出现冲突的情况

import java.util.*
import java.sql.*
//util和sql中都存在Data这个类,会出现歧义,编译出错
//这时候我们就需要使用完整的类名
public class Test{
  public static void main (String[] args) {
     java.util.Date data = new java.util.Data();  
  }
}

2.静态导入

使用import static 可以导入包中的静态方法和字段

import static java.lang.System.*;
//导入了lang包中的System方法
public class Test{
  public static void main (String[] args) {
     out.println("hello!")  
  }
}

这样可以更方便写一些代码,但不推荐,原本的代码已经很方便了,使用静态导入不方便其他人看代码

3.包的访问权限控制

private中的成员只能被类的内部使用。
如果某个成员不包含public和private关键字,此时这个成员可以在包内部的其他类使用,但是不能在包外的类使用

4.常见的系统包

  1. java.lang:系统常用基础类(String、Object),此包从JDK1.1之后自动导入
  2. java.lang.reflect:java反射编程包
  3. java.nat:进行网络编程开发包
  4. java.sql:进行数据库开发的支持包
  5. java.util:是java提供的工具开发包
  6. java.io:I/O编程开发包

二、封装

封装是面向对象方法的重要原则,就是把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。封装是一种信息隐藏技术,在java中通过关键字private,protectedpublic实现封装。

什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。 适当的封装可以让代码更容易理解和维护,也加强了代码的安全性。

1.private:类的内部能访问,类外部不能访问
2.default(也叫包访问权限):类内部能访问,同一个包中的类可以访问,其他类不能访问。
3.protected:类的内部能访问,子类和同一个包中的类可以访问,其他类不能访问。
4.public:类的内部和类的调用者都能访问

权限范围
private < default < protected < public
在这里插入图片描述

什么时候用那种关键字进行封装呢?
封装,即隐藏内部实现细节,只暴露出必要信息给类的调用者。

因此我们在使用的时候应该尽可能的使用较为严格的访问权限,例如一个方法能用private,就尽量不要用public。

另外还有一种简单粗暴的方法:将所有字段设为private,将所有方法设为public。不过这种方式属于对访问权限的滥用。
还是希望大家在写代码的时候认真思考,该类提供的字段是给“谁”使用(是类的内部自己用,还是类的调用者使用,还是子类使用)。

三、继承

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

例:设计一个Animal类

package com.rocket_class.Inherit;

public class Animal {
    public String name;
    public Animal(String name){
        this.name = name;
    }
    public void eat(String food){
        System.out.println(this.name + "正在吃"+ food);
    }

package com.rocket_class.Inherit;

public class Bird {
    public String name;
    public Bird(String name){
        this.name = name;
    }
    public void eat(String food){
        System.out.println(this.name + "正在吃"+ food);
    }

package com.rocket_class.Inherit;

public class Cat {
    public String name;
    public Cat(String name){
        this.name = name;
    }
    public void eat(String food){
        System.out.println(this.name + "正在吃"+ food);
    }

我们发现代码中存在的大量代码冗余
这三个类都有一个相同的eat方法和一个name属性,而且行为和意义是完全一样的,从逻辑上cat和bird都是一种animal(is—a语义)。
此时我们可以让cat和bird继承animal类,来达到代码的重用效果。

继承的语法规则
class 子类 extends 父类{
}

package com.rocket_class.Inherit;

public class Animal {
    public String name;
    public Animal(String name){
        this.name = name;
    }
    public void eat(String food){
        System.out.println(this.name + "正在吃"+ food);
    }
}
package com.rocket_class.Inherit;

public class Bird extends Animal{

    public Bird(String name) {
        super(name);
    }
    public void fly(){
        System.out.println(this.name+"正在飞");
    }
}
package com.rocket_class.Inherit;

public class Cat extends Animal {

    public Cat(String name) {
        //使用super 调用父类的构造方法
        super(name);
    }

}
package com.rocket_class.Inherit;

public class text {
    public static void main(String[] args) {
        Cat cat = new Cat("咪咪");
        cat.eat("猫粮");
        Bird bird = new Bird("叽叽");
        bird.fly();
    }
}

运行结果:
咪咪正在吃猫粮
叽叽正在飞

继承的规则
1.要能使用继承必须满足(子类)is a (父类)的语义关系
2.一个子类只能使用extends继承一个父类。
3.子类会继承父类的所有属性和方法,显示继承(public属性和方法可以直接使用)。隐式继承(private属性和方法)子类其实也继承了这个属性和方法,但是无法直接使用,必须通过父类提供的方法来操作
例:private int age;
必须使用public int getAge(){} 和public void setAge(int age){}方法来使用age 属性

在这里插入图片描述
我们可以发现继承不支持多继承

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值