当前位置: 首页 > news >正文

(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类

目录

1. Object类

 1.1 equals

1.2 toString()

2.final关键字

3.注解

4. 设计模式

 4.1 单例模式

4.1.1 饿汉式

4.1.3 饿汉式 VS 懒汉式

5. 抽象类&抽象方法

6. 接口


1. Object类

 1.1 equals

重写Object 的equals方法,两种实现方式

 

1.2 toString()

 

2.final关键字

 

 

3.注解

4. 设计模式

设计模式是基于场景的解决方案

 4.1 单例模式

 

4.1.1 饿汉式

代码实现:

package org.example;/***   01   饿汉式 : 创建对象实例的时候直接初始化**   典型的空间换时间,类加载的的时候  ==>静态实例对象完成初始化操作*/
public class SingletonOne {// 1. 创建类中的私有构造private SingletonOne(){}// 2. 创建改类型的私有静态实例   (创建并实例化)private static SingletonOne instance = new SingletonOne();// 3. 创建公有静态方法返回静态实例对象public static SingletonOne getInstance(){return instance;}
}

测试结果:

import org.example.SingletonOne;public class test {public static void main(String[] args) {
//        SingletonOne one = new SingletonOne();SingletonOne one = SingletonOne.getInstance();SingletonOne two = SingletonOne.getInstance();System.out.println(one);  //org.example.SingletonOne@4554617cSystem.out.println(two);  //org.example.SingletonOne@4554617cSystem.out.println(one == two);      //trueSystem.out.println(one.equals(two));   //true}
}

4.1.2 懒汉式

package org.example;/*** 02 懒汉式** 类内实例对象创建时并不初始化,直到第一次调用get方法时,才完成初始化操作* 用时间换取空间的一种编码模式*/
public class SingletonTwo {// 01 创建私有构造方法private SingletonTwo(){}// 02 创建开放的静态方法提供实例对象public static SingletonTwo instance = null;// 03. 创建开放的实例方法提供实例对象public static SingletonTwo getInstance(){if(instance == null){instance = new SingletonTwo();}return instance;}
}

测试

import org.example.SingletonOne;
import org.example.SingletonTwo;public class test {public static void main(String[] args) {System.out.println("=====================");SingletonTwo one1 = SingletonTwo.getInstance();SingletonTwo two1 = SingletonTwo.getInstance();System.out.println(one1);   //org.example.SingletonTwo@74a14482System.out.println(two1);   //org.example.SingletonTwo@74a14482System.out.println(one1 == two1);  //true}
}
4.1.3 饿汉式 VS 懒汉式

5. 抽象类&抽象方法

/*** 抽象类: 这个类不允许被实例化了,可以通过向上转型,转向子类实例*/
public abstract class Animal {
//    public void eat(){
//        System.out.println("动物都需要吃东西");
//    }// 抽象方法没有方法体// 子类继承父类也必须重写父类的抽象方法,否则也需要将子类定义为抽象类// static、final、private   不能与abstract并存public abstract void eat();
}

6. 接口

定义接口

public interface INet {/*** 接口中抽象方法可以不写abstract关键字** 默认访问修饰符 public** ==> 当类实现接口时,需要实现接口中的所有抽象方法,否则需要将该类设置为抽象类*/void network();// 接口中可以包含常量, 默认public、 static、 finalint TEMP = 20;// default:默认方法 可以带方法体         jdk1.8后新增的// 可以在实现类中重写,并可以通过接口的引用调用default void connection(){System.out.println("我是接口中的默认链接");}//静态方法也可以待方法体                 jdk1.8后新增的// 不可以在实现类中重写, 可以通过接口名调用static void stop(){System.out.println("我是接口中的静态方法");}
}

实现接口

package com.vb.tel;public class SmartPhoto implements INet{
//    public static final int TEMP = 30;public int TEMP = 30;public void call(){System.out.println("Calling SmartPhoto");}public void network(){System.out.println("Networking SmartPhoto");}@Overridepublic void connection() {//调用接口中的默认方法INet.super.connection();System.out.println("Connection SmartPhoto");}
}

测试类

public class PhoneTest {public static void main(String[] args) {FourthPhone phone4 = new FourthPhone();phone4.game();            //可以玩游戏phone4.getBrand();phone4.call();            //手机可以拨打电话System.out.println("================");IPhoto ip = new FourthPhone();ip.photo();                     //拍照ip = new Camera();ip.photo();                   //相机可以拍照System.out.println("================");System.out.println(INet.TEMP);   //20INet net = new SmartPhoto();System.out.println(net.TEMP);    //20net.connection();//我是接口中的默认链接//Connection SmartPhoto// 接口中的静态方法需要通过接口名来调用INet.stop();               //我是接口中的静态方法}
}

7.内部类 

7.1 成员内部类

        内部类中最常见的,也称为普通内部类

内部类

package com.vb.people;// 外部类
public class Person {public int age;public void eat(){System.out.println("People eat");}// 获取内部类的方法public Heart getHeart(){new Heart().temp = 25;return new Heart();}//成员内部类/*** 1. 内部类在外部使用时,无法直接实例化* 选哟借助外部类信息才能完成实例化* 2. 内部类可以直接方法外部类的成员;如果出现同名属性,优先访问内部类中定义的* 3. 可以通过使用外部类.this.成员的方式,访问外部类中同名的信息* 4. 外部类访问内部类的信息,需要通过内部类实例,无法直接方问* 5. 内部类编译后.class文件明明: 外部类$内部类.class*///注: 不加public的话只能在同胞中调用public class Heart {int age = 13;int temp = 22;public String beat(){eat();return Person.this.age+"心脏在跳动";}}
}

测试类

package com.vb.people;public class PeopleTest {public static void main(String[] args) {Person vb = new Person();vb.age = 25;// 同包下访问内部类
//        Heart heart = new Heart();    //不可行//获取内部类对象实例:  ==>//方式1:  ==> new 外部类.new 内部类Person.Heart myHeart = new Person().new Heart();System.out.println(myHeart.beat());   //0心脏在跳动// 方式2: 通过外部类对象获取内部类实例   ==> 外部类对象.new 内部类Person.Heart heart1 = vb.new Heart();System.out.println(heart1.beat());    //25心脏在跳动// 方式3: 通过外部类对象 获取方法   ==> 外部类对象.获取方法heart1 = vb.getHeart();System.out.println(heart1.beat());    //25心脏在跳动}
}

相关文章:

  • WebGL图形编程实战【7】:变换流水线 × 坐标系与矩阵精讲
  • 深度解析 JWT:从原理到实战的全场景解决方案(附永久 Token 设计与集成系统实践)
  • 用模型预测控制算法实现对电机位置控制仿真
  • Linux服务器硬盘挂载小记录
  • 商城小程序源码介绍
  • 使用ECS搭建云上博客wordpress(ALMP)
  • 汇川Easy系列PLC数据值改变功能块(随动增益改变判断)
  • 2025 AI如何重构网络安全产品
  • IP SSL怎么签发使用
  • 初识C++:类和对象(上)
  • 【SpringBoot实战指南】集成Easy ES
  • 蚓链数字化营销系统深度解析,以“三位一体“模式驱动企业数字化营销转型
  • C/C++:C语言中的__FILE__、__LINE__等几种C标准用法
  • 存储扇区分配表:NAND Flash与SD NAND(贴片式SD卡)的架构差异
  • 在Mathematica中使用BinCounts绘制de Jong吸引子
  • 紫外波段太阳光模拟器介绍
  • 006-nlohmann/json 结构转换-C++开源库108杰
  • 【RabbitMq C++】消息队列组件
  • mapreduce
  • 鸿蒙OSUniApp 开发的下拉刷新与上拉加载列表#三方框架 #Uniapp
  • 绿景中国地产:洛杉矶酒店出售事项未能及时披露纯属疏忽,已采取补救措施
  • 赖清德为“临阵脱逃”作准备,国台办:绝不会任“台独”祸首逍遥法外
  • 国务院关税税则委员会公布公告调整对原产于美国的进口商品加征关税措施
  • 习近平举行仪式欢迎巴西总统卢拉访华
  • 检疫期缩减至30天!香港优化内地进口猫狗检疫安排
  • 外国游客“在华扫货”热:“带空箱子到中国!”