Java小结 ----类与对象

本文介绍了面向对象编程的基本概念,包括类与对象的区别、对象的生成与初始化过程、this关键字的作用等,并详细阐述了封装、继承、多态等核心特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.类
基本概念:
所谓的类就是指共性的概念,⽽对象指的是⼀个具体的、可以使⽤的事物。
⾸先产⽣类(类是⽣产对象的蓝图),⽽后才可以产⽣对象。对象的所有⾏为,⼀定在类中进⾏了完整的定义。
类中的组成:
a.属性(变量,描述每个对象的具体特点)
b. ⽅法(操作的⾏为)
例如:定义一个 Person类;

class Person{
      public String name;
      public int age;
 
   public Person(String name,int age){
          this.name = name ;
          this.age = age ; 
   }
 
   public String getPersonInfo(){
   return "姓名:"+this.name+",年龄:"+this.age; 
   }
}

二、生成对象
产⽣对象的语法如下:

类名称 对象名称 = new 类名称();

以Person为例,我们可以如下产⽣⼀个Person类的对象:

Person p1 = new Person();
Person p2 = new Person("Steven",25);

产生对象需要两步:
1.为对象开辟内存
2.用合适的构造函数—>>>>构造函数不止一个
三、对象的初始化:
1 提供一系列的get和set方法(public)
2 通过构造函数 可发生重载
a.若没有提供构造函数,则系统会自动提供不带有参数的构造函数;
b. 构造函数可发生重载:
c. r若遇到static,用类名访问即可;
3 静态代码块和实例代码块
a. 静态代码块static(…)不能依赖对象
b. 静态代码块只能被初始化一次;
c. 实例代码块:(…)
4.对象初始化顺序:
静态代码块---->>实例代码块—>>构造函数;
5.除了class对象,其他的所有对象都保存在堆上,class对象在方法区上他保存RTTI信息(runtime type information)
四、 this是什么及其作用;

  1. 当前对象的引用
  2. 调用其它函数
  3. 调用属性 例如:this.name=name;
  4. this(name:"…",age:"…"); 调用两个参数的函数,必须放在第一行

五、面向对象的三大特征:
1.封装:
内部操作对外部不可见,只能通过该类的所提供的方法来实现对内部消息的操作和访问;
编写类时,类中的所有属性必须使⽤private封装。
属性若要被外部访问,必须定义setter、getter⽅法。
2 继承:
a. 被继承的类:基类 父类 超类
b. 实现继承的类: 子类 派生类

c. 派生继承了基类 继承了什么东西?
除了构造函数外的其他东西
派生类需要帮助基类构造

d. super (重写父类的方法:覆盖)
super (); 调用父类的构造函数 放在派生类第一行
super.data 调用基类的属性
super.func( ) 调用基类的成员函数
3 多态
基类引用派生类对象(向上转型),并且基类和派生类有同名的(重写)方法 (地址覆盖);
4 向上转型和向下转型:
a. 向上转型(运行时多态)
Student是子类,Person是父类 Person person=new
Student(name:"…",age:"…");
b. 向下转型;
需要进行强制类型转换并且向下转型的前提是向上转
六、 内部类
所谓内部类就是在⼀个类的内部进⾏其他类结构的嵌套的操作
在外部类内部创建内部类,就像普通对象⼀样直接,创建例如:

Inner in = new Inner();

内部类存在的原因:

  1. 内部类方法可以访问该类定义所在作用域中的数据,包括被private修饰的私有数据
  2. 内部类可以对同一包中的其他类隐藏起来
  3. 内部类可以实现Java单继承的缺陷
  4. 想定义一个回调函数但不想写代码可以使用匿名内部类

内部类与外部类的关系

  1. 对于非静态类,内部类的创建依赖与外部类的实例对象、
  2. 内部类是一个相对独立的个体
  3. 内部类可以直接访问外部类的元素,但外部类不能直接访问内部类的元素
  4. 外部类可以通过内部类引用间接访问内部类元素

外部类的创建语法:

外部类.内部类 内部类对象 = new 外部类.内部类();

1 实例内部类(成员内部类):
在成员内部类中要注意两点:

a. 成员内部类中一般不能存在任何static的变量和⽅法,但若在编译期间确定值,比如一个变量被final修饰,则可以。
b. 成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类
如何拿到内部类对象? ------------ 通过外部类访问内部类
c. 依附于外部类, 只有创建了外部类才能创建内部类
d. 实例内部对象有额外的内存消耗吗? 有, 实例内部类拥有外层类的this引用。
2 静态内部类
用关键字static修饰,不依赖外部类。
一般情况下不能访问外部类的实例数据成员,但引入外部类对象时可以。

3.方法内部类:
⽅法内部类定义在外部类的⽅法中,局部内部类和成员内部类基本⼀致,只是它们的作⽤域不同,⽅法内部类只能在该⽅法中被使⽤,出了该⽅法就会失效。
4.匿名内部类:
匿名内部类其实就是⼀个没有名字的⽅法内部类,所以它符合⽅法内部类的所有约束,没有访问修饰符,他必须继承一个抽象类或者一个接口,匿名内部类中不存在任何静态成员或者方法,它没有构造方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值