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;
    }
}
相关推荐
爪娃侠13 分钟前
wsl2的centos7安装jdk17、maven
java·maven
闪电麦坤9516 分钟前
C#:尝试解析方法TryParse
开发语言·c#
我不是程序猿儿18 分钟前
【C#】构造协议帧通过串口下发
开发语言·c#
在下木子生23 分钟前
SpringBoot条件装配注解
java·spring boot·后端
周Echo周1 小时前
5、vim编辑和shell编程【超详细】
java·linux·c++·后端·编辑器·vim
千野竹之卫1 小时前
2025最新云渲染网渲100渲染农场使用方法,渲染100邀请码1a12
开发语言·前端·javascript·数码相机·3d·3dsmax
滴答滴答嗒嗒滴1 小时前
用 Python 实现机器学习小项目:从入门到实战
开发语言·python·机器学习
用户94508519124921 小时前
一文搞懂过滤器和拦截器
java
Java水解1 小时前
Java面试必问到的10道面试题
java·面试
byxdaz1 小时前
Qt中绘制不规则控件
开发语言·qt