Java面向对象——封装和继承

本文深入探讨Java面向对象的三大特性:封装、继承与多态。详细讲解了封装的使用,包括属性私有化、提供get/set方法及其实现优势。同时介绍了包组织结构、访问权限修饰符和static关键字的高级应用。

Java面向对象——封装和继承

面向对象的三大特性:

  • 封装
  • 继承
  • 多态

1掌握封装的使用

1.1封装的作用

封装: 类和对象章节 当时学到的是半成品的封装。学会发现类,发现类的属性、累的行为

另外一般的封装概念: 将一些不安全的信息进行封装(保护),然后将可以直接被我们使用的部分开放出来(提升安全性和可用性,有面向接口编程的思想)

使用步骤: 未来这些类组件都应该采用封装来进行信息保护

  • 属性私有化(private)
  • 提供公共的 getter() 和 setter() 方法
  • 根据需求在set() 和 get() 方法中添加逻辑判断

1.2 一般JavaBean的规范

JavaBean: 其实就是指的我们那些对象类

  • 属性私有化

  • 提供公共的get() Set() 方法

  • 提供无参构造

  • 实现序列化接口(序列化其实就是我们的对象在流之间进行转换的一种概念)

1.3封装的优势

我们未来开发的系统应该非常接近于 高内聚、松耦合。

可能面试题 :你对封装的理解下面这些 在加上你的感受

  1. 便于使用者正确使用系统,防止错误修改属性 。简单来说就是比较安全
  2. 有助于系统之间的低耦合(松耦合),提高系统的独立性。保证系统某一个实现发生变化时,只要他的家口不变,就不会影响其他的系统
  3. 提高软件的可重(chong)用性。每个功能的实现都是一个相对独立的整体,可以再多种情况下得到重(chong)用。
  4. 降低了构建大型系统 项目的风险。即使整个系统没有成功,但是个别独立的子系统可以能依然有价值

Interget.valueof(属性) 将String类型修改为int类型

2.掌握包组织结构

2.1 包的作用

package:包 从第二章就开始创建了

他的作用就是用于对源代码进行分包管理,方便我们开发和阅读,另外也一定程度上解决了同一包下无法出现同名文件

规范:要求包名全部小写

  • 公司域名的倒序+ 应用程序名 +【可选】部门名称 +功能模块
  • 假设:
    • 腾讯:www.tencent.com ->com.tencent.xx
    • 开发的 Tim :com.tencent.tim.xxx
  • Android 应用将包作为了一种区分不同应用程序的一个要素,另外还依靠与签名

2.2导包

在我们使用类的时候(一个类使用另一个类)

  1. 如果实在同一个包中使用某个类,那么可以直接进行使用
  2. 如果是在不同的包中使用某个类,必须先进行导包(import)
  3. 如果使用的是java.lang包下的内容的话,需要导包例如:System、 Math…(这是JVM自动导入的)
例如:
import java.util.Scanner; // 导包 因为不在一个包中 JVM也不知道去哪里找到这个类 
public class Test(){
	Scanner input =new Scanner();
}

包声明语法(必须出现在文件中的第一行有效代码)package 包地址

导包的语法:必须出现在类声明上方 包声明下方 import 类的全限定名; 例如java.util.Scanner ;

如果需要用到java.util包中的很多内容:那么可以直接 import java.util.*

3.掌握Java中的访问权限修饰符

访问修饰符:在累的语法和方法的语法上(访问级别由小到大)

访问修饰符不仅可以修饰属性还可以修饰类 、修饰方法

  • pricate : 被这个修饰的属性或方法 表示只能在当前类使用
  • [package/default] :当你不写访问修饰符是 代表的就是包级别的访问
  • protected
  • public

在这里插入图片描述

在一个类文件中,被public修饰的类的名称必须和文件名相同

一般情况下不会再一个类文件中定义多个类

4.掌握static关键字[有难度]

static :如果被它修饰的方法,在调用非static修饰的方法时,必须先创建对象才能使用

static 表示静态的 ,被它修饰的信息要和JVM运行时数据区中的方法区打交道。

它可以修饰:

  • 属性: 类属性/类变量/静态变量 可以通过类名直接调用
  • 方法: 类方法/静态方法 可以通过类名直接调用
  • 代码块: 静态代码块 创建对象时 先加载代码块 在加载构造方法
    • 我了在某种时机下自行的一段代码
    • 静态代码块只执行一次 ,在类加载是执行
    • 构造代码块会随着对象穿件而执行,优先于构造方法
public class Test(){
    public static void main(String[] args){
        Test test = new Test();
        test.meth();
    }
    public void meth(){
        
    }
}

注意事项:

  • static修饰的信息都是属于类的信息 它们户会随着类的加载而进行初始化

    public static void method1(){
        // method2(); //错误  因为当 1 加载时 2还未初始化所以我们才会先创建对象在去使用
    }
    public void  method2(){
        1(); // 1 已经在类加载 的时候 加载完了 所以可以正常使用
    }
    
  • static修饰信息是可以被类的所有对象共享的

### 封装 封装面向对象编程的基本特性之一,其核心思想是将数据行为绑定在一起,并对外部隐藏实现细节。通过使用访问修饰符(如 `private`、`protected` `public`),可以控制类成员的可见性。封装提高了代码的安全性可维护性,因为外部代码只能通过定义好的接口与对象交互,而无法直接访问或修改对象的内部状态[^3]。 例如,一个类可以将某些变量设为私有,并通过公共方法(getter setter)来访问或修改这些变量: ```java public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` ### 继承 继承面向对象编程中实现代码复用的重要机制。它允许一个类(子类)继承另一个类(父类)的属性方法。通过继承,子类不仅可以复用父类的代码,还可以扩展或修改父类的行为。继承的语法如下: ```java public class Animal { public void speak() { System.out.println("Animal speaks"); } } public class Dog extends Animal { @Override public void speak() { System.out.println("Dog barks"); } } ``` 在上述代码中,`Dog` 类继承了 `Animal` 类,并重写了 `speak()` 方法以提供自己的实现。继承的好处包括代码重用、逻辑组织扩展性。通过建立类之间的层次结构,代码变得更加清晰易于维护[^3]。 在继承中,子类可以重写或隐藏父类的方法。重写是指子类提供与父类相同方法签名(方法名、参数列表返回值类型)的方法,以改变方法的行为。隐藏是指子类定义与父类相同的静态方法,以覆盖父类的实现。`super` 关键字用于调用父类的方法或构造函数,而 `final` 关键字可以防止类被继承或方法被重写[^1]。 ### 多态 多态是面向对象编程的核心特性之一,它允许不同类的对象对同一消息做出不同的响应。要实现多态,必须满足以下条件:必须在继承体系下,子类必须重写父类的方法,并且通过父类的引用调用子类重写的方法。多态的体现是在代码运行时,根据传递的对象类型,调用对应类中的方法[^2]。 例如: ```java public class Animal { public void speak() { System.out.println("Animal speaks"); } } public class Dog extends Animal { @Override public void speak() { System.out.println("Dog barks"); } } public class Cat extends Animal { @Override public void speak() { System.out.println("Cat meows"); } } public class Main { public static void main(String[] args) { Animal animal1 = new Dog(); Animal animal2 = new Cat(); animal1.speak(); // 输出 "Dog barks" animal2.speak(); // 输出 "Cat meows" } } ``` 在上述代码中,`animal1` `animal2` 都是 `Animal` 类型的引用,但它们分别指向 `Dog` `Cat` 对象。在运行时,根据实际对象的类型,调用对应类中的 `speak()` 方法。这种机制使得代码更加灵活,能够根据不同的对象执行不同的行为。 ### 相关问题 1. 封装面向对象编程中的作用是什么? 2. 继承的语法关键字有哪些? 3. 多态的实现条件应用场景是什么? 4. 方法重写方法重载的区别是什么? 5. 如何通过继承实现代码重用?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值