JAVA基础-Day7-黑马跟课题目-面向对象基础(代码块、抽象类、接口)

2024-03-17 15:30

本文主要是介绍JAVA基础-Day7-黑马跟课题目-面向对象基础(代码块、抽象类、接口),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、代码块

1.final

final
修饰方法:表明该方法是最终方法,不能被重写
修饰类:表明该类是最终类,不能被继承
修饰变量:常量,只能被赋值一次
修饰基本数据类型:记录的值不能发生改变(常量)
修饰引用数据类型:记录的地址值不能发生改变,内部的属性值可以改变

好处:增加代码可读性

private static final String ADD_STUDENR = "1";

2.局部代码块

局部代码块:变量只能在所属大括号内存在,节省空间(常规)

3.构造代码块

构造代码块:{(不用)
1.写在成员位置的代码块
2.作用:可以把多个构造方法中重复的代码块抽取出来
3.执行时机:创建本类对象的时候会先执行构造代码块再执行构造方法
}
形式:{}

public class CodeBlockDemo {  // 构造代码块  {  System.out.println("实例初始化代码块在每次创建对象时执行。");  }  // 构造方法  public CodeBlockDemo() {  System.out.println("这是构造方法。");  }  // 局部代码块  public void display() {  // 方法中的代码块  {  System.out.println("这是方法中的代码块。");  }  System.out.println("这是方法中的其他代码。");  }  public static void main(String[] args) {  // 创建对象  CodeBlockDemo demo = new CodeBlockDemo();  // 调用方法  demo.display();  }  
}

4.静态代码块

 静态代码块:(重点)
随着类的加载而加载,并且自动触发,只执行一次
使用场景:类加载,数据初始化

如果想要做数据初始化,就用静态代码块
例如:学生管理系统的信息录入

import java.util.*;class User
{String name;String id;int age;public User(String name,String id,int age){this.name=name;this.id=id;this.age=age;}
}
public class App {//静态代码块录入信息,更安全,不会被反复调用static ArrayList<User> list=new ArrayList<>();static{list.add(new User("张三","123",12));}public static void main(String[] args) {Scanner in=new Scanner(System.in);}
}
//public class App{
//    public static void main(String[] args) {
//        Scanner in=new Scanner(System.in);
//        ArrayList<User> list=new ArrayList<>();
//        list.add(new User("张三","123",12));
//
//    }
//}

二、抽象类

概念

使用场景:

1.父类不能确定具体的方法体,子类可能会出现很多用法

例如:

//class Person{
//    public void Eat()
//    {
//    }
//}
abstract class Person{public abstract void Eat();
}
class Student extends Person{@Overridepublic void Eat(){System.out.println("吃米饭");}
}
class Teacher extends Person{@Overridepublic void Eat(){System.out.println("吃面条");}
}
public class Main{public static void main(String[] args) {Student a=new Student();Teacher b=new Teacher();a.Eat();b.Eat();}
}

为防止空的父类被调用,使其变为abstract抽象类
2.子类必须重写抽象方法

使用注意:

1.抽象类不能实例化
2.抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
3.可以有构造方法
4.抽象类的子类
        要么重写抽象类中的所有抽象方法,
        要么是抽象类

构造方法:创建子类对象的时候,给属性进行赋值

抽取共性的意义:统一所有子类的相关方法的名称和调用方法
方便查看,方便调用,方便修改

三、接口 

1.概念

接口的使用:

一个方法类(interface)implements
子类无法继承父类的某个或多个方法
比如:动物类里的“游泳”方法,只有兔子不会游泳,其它动物子类自定义游泳太麻烦

接口中成员的特点:

接口中成员的特点:
1.成员变量:1、只能是常量  2. 默认修饰符:public static final
2.构造方法:没有
3.成员方法:1、只能是抽象方法 2、默认修饰符:public abstract

面向对象各种关系: 

类和类的关系:
继承关系,只能单继承,但可以多层继承


类和接口的关系:
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口


接口和接口的关系:
继承关系,可以单继承,也可以多继承(实现类实现了最底层的子接口,就必须重写接口体系里所有的抽象方法)

 接口与抽象类的不同:

抽象类是对象类的抽象,可以有构造方法

接口是对行为的规则定义,不可以有可变成员变量(有也只能定义常量)

 jdk8,jdk9新方法:

1.default关键字(默认方法)

jdk8 默认方法:default ...
1.默认方法不是抽象方法,不会强制重写,若重写,去掉default关键字
2.public可省略 default不可省略
3.如果实现了多个接口,多个接口中有相同名字的默认方法,子类必须 对该方法进行重写
(在接口升级之后,原子类接口不需要实现接口里的新方法,但也可以实现,(兼容性))

2.static关键字(静态方法)

jdk8 静态方法:static
1.静态方法只能用接口名引用
2.静态方法不能被重写

3. private关键字(私有方法)

jdk9 私有方法:private
1.适用于接口里的默认方法
2.static private 适用于接口里的静态方法

4.接口多态

接口类型 j = new 实现类对象()
理解:谁实现了接口j 谁就是接口j的儿子,接口j相当于实现类的父类
可以调用所有实现类对象的方法

当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态
这么理解吧:我现在想要实现一个搬家的方法:传递的参数是一个可以帮我搬家的工具:比如搬家公司,或者一辆汽车,或者一个人 但是这些东西我没办法找到一个统一的可以替代的东西当作参数传入,
所以我定义一个 叫做“运输”的接口 ,将这个接口传入,  然后呢 我可以让 人,汽车,搬家公司这些东西都作为这个接口的实现类,这样他们就具有了搬家这一功能,而且我可以将 他们作为参数传入

5.适配器

创建一个抽象类,实现接口的所有方法

原理:接口中所有抽象方法都必须被全部实现,但抽象类里的默认方法不需要被全部实现

定义一个中间类,当作中转站,其它类继承抽象类,需要用哪个方法,就重写哪个方法

2.动物会游泳(但不全会)

A.动物类(父类)

public abstract class Animal{private String name;private int age;public Animal(String name,int age){this.name=name;this.age=age;}public abstract void eat();public void drink(){System.out.println(this.name+"正在喝水");}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

 B.青蛙类(会游泳)

class Frog extends Animal implements Swim{public Frog(String name,int age){super(name,age);}@Overridepublic void eat(){System.out.println(this.getName()+"正在吃虫子");}@Overridepublic void swim(){System.out.println(this.getName()+"正在蛙泳");}
}

C.狗类(会游泳) 

class Dog extends Animal implements Swim{public Dog(String name,int age){super(name,age);}@Overridepublic void eat(){System.out.println(this.getName()+"正在吃骨头");}@Overridepublic void swim(){System.out.println(this.getName()+"正在狗刨");}
}

D.羊类(不会游泳) 

class Sheep extends Animal{public Sheep(String name,int age){super(name,age);}@Overridepublic void eat(){System.out.println(this.getName()+"正在吃草");}
}

E.主函数 

public class Main {public static void main(String[] args) {Frog a=new Frog("小青蛙",40);Dog b=new Dog("大黄",20);Sheep c=new Sheep("喜羊羊",10);a.eat();b.eat();c.eat();a.drink();a.swim();b.swim();}
}

F.接口

public interface Swim {public void swim();
}

 3.运动队

概述:

A.人员类

public abstract class Person {String name;int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Person{name = " + name + ", age = " + age + "}";}
}

B.乒乓人员

public abstract class PingPongPerson extends Person{public PingPongPerson(String name,int age){super(name,age);}public void SpeakE(){System.out.println(this.getName()+"说英语");}}

C.篮球人员

public abstract class BasketballPerson extends Person {public BasketballPerson(String name,int age){super(name,age);}}

D.接口:教

public interface Teach{void teach();
}

E.接口:学

public interface Learn{void learn();
}

F.乒乓运动员

class PpAthlete extends PingPongPerson implements Learn{
public PpAthlete(String name,int age){super(name,age);}@Overridepublic void learn(){System.out.println(this.getName()+"学乒乓");}}

G.乒乓教练

class PpCoach extends PingPongPerson implements Teach{public PpCoach(String name,int age){super(name,age);}@Overridepublic void teach() {System.out.println(this.getName()+"教乒乓");}
}

H.篮球运动员

class BbAthlete extends BasketballPerson implements Learn{public BbAthlete (String name,int age){super(name, age);}@Overridepublic void learn() {System.out.println(this.getName()+"学篮球");}
}

I.篮球教练

class BbCoach extends BasketballPerson implements Teach{public BbCoach(String name,int age){super(name,age);}@Overridepublic void teach() {System.out.println(this.getName()+"教篮球");}
}

J.主函数

public class Main {public static void main(String[] args) {PpAthlete a=new PpAthlete("张继科",21);PpCoach b=new PpCoach("刘国梁",50);BbAthlete c=new BbAthlete("姚明",30);BbCoach d=new BbCoach("篮球教练",50);a.learn();a.SpeakE();b.teach();b.SpeakE();c.learn();d.teach();}
}

这篇关于JAVA基础-Day7-黑马跟课题目-面向对象基础(代码块、抽象类、接口)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/2302_76949164/article/details/136063763
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/819345

相关文章

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

Spring @RequestMapping 注解及使用技巧详解

《Spring@RequestMapping注解及使用技巧详解》@RequestMapping是SpringMVC中定义请求映射规则的核心注解,用于将HTTP请求映射到Controller处理方法... 目录一、核心作用二、关键参数说明三、快捷组合注解四、动态路径参数(@PathVariable)五、匹配请

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

Swagger在java中的运用及常见问题解决

《Swagger在java中的运用及常见问题解决》Swagger插件是一款深受Java开发者喜爱的工具,它在前后端分离的开发模式下发挥着重要作用,:本文主要介绍Swagger在java中的运用及常... 目录前言1. Swagger 的主要功能1.1 交互式 API 文档1.2 客户端 SDK 生成1.3

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接

java连接opcua的常见问题及解决方法

《java连接opcua的常见问题及解决方法》本文将使用EclipseMilo作为示例库,演示如何在Java中使用匿名、用户名密码以及证书加密三种方式连接到OPCUA服务器,若需要使用其他SDK,原理... 目录一、前言二、准备工作三、匿名方式连接3.1 匿名方式简介3.2 示例代码四、用户名密码方式连接4