Java的封装
来源:互联网 发布:mysql安装教程 编辑:程序博客网 时间:2024/06/03 21:03
速记:
顺序:public---->protected---->friendly(默认)---->private
快速重构source---->Generate getters and setters----->选择
说明
构造方法:用于实例化,初始化对象
setter函数:用于修改类的对象的成员变量的值
类的成员变量不需要初值,在构造函数中初始化
内部类相当于私有的
练习代码:Petshop,PetShopPrac1
内部类:ClassInner
整理:
为什么为什么要使用封装
下面代码有什么问题?
Dog d = new Dog();
d.health = 1000; //不合理的赋值
为了不让别人任意修改值,因使用封装
什么是封装
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
封装的好处
1、只能通过规定方法访问数据
2、隐藏类的实现细节
3、方便加入控制语句
4、方便修改实现
封装的方法
1、将成员变量声明为私有的(private)
2、再提供一个或多个公有(public)setXX() 和getXX()方法实现对该成员变量的访问和修改。
3、类中的私有成员变量/成员方法只能在该类内部调用,不能通过该类的对象调用。
内部类(nested classes)
一、将一个类定义置入另一个类定义中就叫作“内部类”
class Outer{
int outer_i = 100;
void test(){
Inner in = new Inner();
in.display(); }
class Inner{
Outter out = new Outter();
void display(){
System.out.println("display: outer_i = " + outer_i);
}
}
}
1.Inner类是在Outer内部定义的
2.在Inner类中可以访问Outer类中 的成员属性outer_I;
3.在Outer类中可在方法test()中创建 内部类Inner的对象;
4.通过Outer类的对象调用test() 方法最终就可以执行Inner类中的方法
二、类中定义的内部类特点
1、内部类可以直接访问外部类的成员,反之则不行。
2、内部类可以声明为private或protected。
3、内部类成员只有在内部类的范围之类是有效的。
4、非静态的内部类会持有外部类的一个隐式引用,当外部类被销毁后, 内部类仍然持有它的引用, 导致外部类无法被垃圾收集.静态的内部类不会持有外部类的引用
private内部类和static内部类
一、private内部类调用方式:
1、在外部类的方法中实例化内部类,并调用自己的方法
2、实例化外部类,并调用包含内部类的方法
二、static内部类
一、定义格式 修饰符 static class name{ }
static内部类特点:
1、static内部类可以象一个普通外部类一样直接创建该对象。
2、static内部类只能访问外部类中的静态成员或方法。
3、static内部类可以声明static成员,但非static的内部类不可以。
4、修饰符没有任何限制。
二、例子
public class StaticInnerDemo {
String name = "Tom";
void PrintName(){
System.out.println(" Outer name : "+name);
}
public static class Inner{
int age = 10;
void PrintAge(){
System.out.println(" inner age : "+age);
}
}
public static void main(String[ ] args){
Inner inner = new Inner();
inner.PrintAge();
}
说明:
1.Inner为静态内部类。
2.Inner不能访问name属 性和PrintName()方法。
3.在外部类中可以直接创建 该类的对象
内部类如何被外部类引用
将内部类声明为非private的就可以通过外部类创建一个内部类的对象引用,并可通过该引用调用内部类自己定义的方法。
eg:
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass ();
方法和作用域中的内部类
内部类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类。
匿名类
匿名类是不能有名字的类,它们不能被引用,只能在创建时用New语句来声明它们。匿名类的声明是在编译时进行的,实例化在运行时进行。(疑问)
Java允许直接用接口名和一个类体创建一个匿名对象(疑问)
0 0
- Java的封装类
- Java TCP的封装
- java的封装性
- Java UDP 的封装
- Java 的封装性
- JAVA的封装特性
- java的封装
- java的封装原理
- Java的封装性
- java的封装
- 3、Java的封装
- Java之类的封装
- Java 封装的详解
- java的封装
- JAVA的封装类
- java的封装
- JAVA的封装性
- java的封装性
- STM32f103——ILI9341
- codeforces 764C Timofey and a tree (思维题)
- Py_BuildValue()返回NULL的原因及解决方法;string在char和utf-8编码之间互转
- Android 高版本API方法在低版本系统上的兼容性处理
- WebGIS中地图恢复初始位置及状态
- Java的封装
- 【Inno Setup】Gif插件2.1
- c# checked关键字
- 初步使用EventBus (一)
- python学习笔记1——python 中 Tkinder 使用常见问题
- LINUX分区、目录挂载
- Unity3D 快捷键技巧
- java图片等比例缩略显示在页面
- 怎么多了一个typename?