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-黑马跟课题目-面向对象基础(代码块、抽象类、接口)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819345

相关文章

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一