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

Java基础——面向对象

1.抽象Abstract:抽象类和抽象方法;

抽象类:不完整的类,就是抽象类:abstract class 类名;

抽象方法:只有声明,没有实现的方法;

abstract 返回值类型 方法名(参数);

因为类不完整,所以无法直接构建对象;抽象类无法直接构建对象,但是可以通过子类间接构建对象;

如果一个类中含有抽象方法,那么这个类是抽象类;

如果一个类是抽象类,他的方法不一定是抽象方法;

例如:

import java.util.concurrent.Callable;

public class java_3_24
{
    public static void main(String[] args) {
    Child c = new Child();
    c.eat();
    }

}
abstract class Person{
    public abstract void eat();
}
class Child extends Person{
    public void eat(){
        System.out.println("中国人");
    }
}

注意:在抽象类中只需声明方法即可;再在子类中把方法进行补充;

小心:abstract关键字不能和final同时使用;

2.接口:

所谓的接口,可以简单理解为规则;

基本语法:   interface 接口名称{    规则属性, 规则的行为};

接口其实是抽象的;

规则的属性必须是固定值,而且不能修改;

属性和行为的访问权限必须为公共的;

属性应该是静态的;

行为应该是抽象的;

接口和类是两个层面的东西;

接口可以继承其他接口;

类的对象需要遵循接口,在Java中,这个遵循,称之为实现(implements),类需要实现接口,而且可以实现多个接口;

例如:

import java.util.concurrent.Callable;

public class java_3_24
{
    public static void main(String[] args) {
    Computer c = new Computer();
    Light light = new Light();
    c.usb1 = light;
    Light light1 = new Light();
    c.usb2 = light1;
    c.powerSupply();
    }

}
interface USBInterface{

}
interface USBSupply extends USBInterface{
    public void powerSupply();
}
interface USBReceive extends USBInterface{
    public void powerReceive();
}
class Computer implements USBSupply{
    public USBReceive usb1;
    public USBReceive usb2;
    public void powerSupply(){
        System.out.println("电脑提供能源");
        usb1.powerReceive();
        usb2.powerReceive();
    }
}
class Light implements USBReceive{
    public void powerReceive(){
        System.out.println("电灯接收能源");
    }
}

首先定义了USB接口的规则,然后分别让supply和receive分别继承该规则,然后让计算机和台灯分别满足对应规则,计算机中定义两个usb接口,定义能源提供的方法;light中定义能源接收的方法;

3.枚举:

枚举是一个特殊的类,其中包含了一组特定的对象,这些对象不会发生改变,一遍都使用大写的标识符。

枚举使用enum关键字使用;

枚举类会将对象放置在最前面,那么和后面的语法需要使用分号隔开;

枚举类不能创建对象,它的对象是在内部自行创建;

例如:

import java.util.concurrent.Callable;

public class java_3_24
{
    public static void main(String[] args) {
        System.out.println(City.BEIJING.name);
        System.out.println(City.SHANGHAI.code);
    }

}
enum City{
    BEIJING("北京", 1001), SHANGHAI("上海", 1002);
    City( String name, int code){
        this.code = code;
        this.name = name;
    }
    public String name;
    public int code;
}

创建了两个城市,在构造时传参,并赋值给城市的属性,这样就达到了创建类的一个效果;

4.匿名类:

import java.util.concurrent.Callable;

public class java_3_24
{
    public static void main(String[] args) {
    Me me = new Me();
    me.sayHello(new Zhangsan());
    }

}
abstract class Person{
    public abstract String name();
}
class Me{
    public void sayHello(Person person){
        System.out.println("Hello " + person.name());
    }
}
class Zhangsan extends Person{
    public String name(){
        return "zhangsan";
    }
}

创建一个me对象,然后调用sayhello方法,传入一个Zhangsan类的对象,他是改写的抽象类Person的所以将对象传进去,打印hello+name;

也可以这样写:

import java.util.concurrent.Callable;

public class java_3_24
{
    public static void main(String[] args) {
    Me me = new Me();
    me.sayHello(new Person() {
        @Override
        public String name() {
            return "wangwu";
        }
    });
    }

}
abstract class Person{
    public abstract String name();
}
class Me{
    public void sayHello(Person person){
        System.out.println("Hello " + person.name());
    }
}

直接传入抽象的类并在小括号内进行函数方法的初始化;

再例:

import java.util.concurrent.Callable;

public class java_3_24
{
    public static void main(String[] args) {
        Bird b = new Bird();
        b.fly();
    }

}
interface Fly{
    public void fly();
}
class Bird implements Fly{
    public void fly(){
        System.out.println("使用翅膀飞翔");
    }
}

转换为对应的匿名类模式:

import java.util.concurrent.Callable;

public class java_3_24
{
    public static void main(String[] args) {
        new Fly(){
            @Override
            public void fly() {
                System.out.println("使用飞行器飞翔");
            }
        }.fly();
    }

}
interface Fly{
    public void fly();
}

5.建立数据模型:

Bean类的设计规范:Bean规范:

(1)类要求必须含有无参,公共的构造方法;

(2)属性必须私有化,然后提供公共的set,get方法;

一个简单的登陆系统:

public class java_3_24
{
    public static void main(String[] args) {
        User user = new User();
        user.account = "admin";
        user.password = "admin";
        System.out.println(login(user));

    }
    public static boolean login(User user){
        if (user.account.equals("admin") && user.password.equals("admin")){
            return true;
        }else {
            return false;
        }
    }
}
class User{
    public String account;
    public String password;
}

优化后:

public class java_3_24
{
    public static void main(String[] args) {
        User user = new User();
        user.setAccount("admin");
        user.setPassword("admin");
        System.out.println(login(user));

    }
    public static boolean login(User user){
        if (user.getAccount().equals("admin") && user.getPassword().equals("admin")){
            return true;
        }else {
            return false;
        }
    }
}
class User{
    private String account;
    private String password;
    public void setAccount(String account){
        this.account = account;
    }
    public void setPassword(String password){
        this.password = password;
    }
    public String getAccount(){
        return account;
    }
    public String getPassword(){
        return password;
    }
}

相关文章:

  • 如何在Vue项目中封装axios
  • 人工智能生成的图片,受著作权法保护吗?
  • Apache SeaTunnel 用户征稿计划启动!分享数据集成实践经验,赢社区荣誉!
  • verilog/systemverilog中的位序问题
  • 【3天!!!从0-1完成自动化集成平台开发--Cursor AI赋能0代码基础测试工程师开发平台-亲测有效-保姆级】
  • Python 装饰模式
  • springboot 实现base64格式wav转码并保存
  • DeepSeek 给 API 网关上了一波热度
  • 0.雷达信号
  • 常用设计模式
  • 宝塔SSL申请Let‘s Encrypt提示“验证信息构造失败!{}“
  • 网损仪详解
  • 深度学习笔记19-YOLOv5-C3模块实现(Pytorch)
  • win10下python脚本运行缺失ccache的问题处理
  • 性能测试~
  • 线程同步——读写锁
  • MYTOOL-记事本
  • C#基础学习(八)终章 C#中的结构体
  • Mockito 全面指南:从单元测试基础到高级模拟技术
  • 前端知识点---window.location.assign() 和 window.location.href 的区别(javascript)
  • 查询工具类网站制作/模板式自助建站
  • 服务器网站建设维护合同/花西子网络营销案例分析
  • 东莞凤岗疫情/seo公司哪家好用
  • 用织梦系统做的2个网站要把它都上传到服务器上吗/seo自动点击排名
  • 大连网站搜索排名提升/免费的舆情网站入口在哪
  • 亚马逊雨林是怎么形成的/多少关键词排名优化软件