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

建筑培训网址佛山seo优化外包

建筑培训网址,佛山seo优化外包,跨境电商多平台运营,网站如何做优化排名本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 概述 接…

本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。

01 概述

接口采用interface关键字定义,在JDK8之前,接口中只能定义常量和抽象方法。

在这里插入图片描述

接口是用来被类实现(implements)的,实现接口的类称为实现类,一个类可以同时实现多个接口。

注:接口不能创建对象!亲爸是抽象类,干爹是接口!

在这里插入图片描述

A.interfaceA接口

public interface A {//常量//public static final String SCHOOL_NAME = "黑马程序员";String SCHOOL_NAME = "黑马程序员";//抽象方法//public abstract void run();void run();
}

B.interfaceB接口

public interface B {void cry();
}

C.java C实现类

public class C implements A, B{@Overridepublic void run(){System.out.println("run");}@Overridepublic void cry(){System.out.println("cry");}
}

Test.java 测试程序

public class Test {public static void main(String[] args) {System.out.println(A.SCHOOL_NAME);C c = new C();c.run();c.cry();}
}

在这里插入图片描述

02 好处

  • 弥补了类单继承的不足,一个类可以实现多个接口,功能强大
  • 使得程序可以面向接口编程,实现解耦合,切换各种业务实现
public class Test {public static void main(String[] args) {Driver d = new Student();Friend f = new Student();People p = new Student();Driver d1 = new Student();Driver d2 = new Teacher();}}interface Driver{}
interface Friend{}
class People{}class Student extends People implements Driver, Friend{}
class Teacher extends People implements Driver{}

03 案例:实现一个班级学生信息管理模块

在这里插入图片描述

Student.java 自定义数据库

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {private String name;private char gender;private double score;
}

ClassDataInfer.interface 自定义接口

public interface ClassDataInter {void printAllStudentInfos();void printAverageScore();
}

Test.java 主程序

public class Test {public static void main(String[] args) {//自己定义的Student类Student[] allStudents = new Student[10];allStudents[0] = new Student("张三", '男', 85);allStudents[1] = new Student("李四", '女', 68);allStudents[2] = new Student("王五", '男', 49);allStudents[3] = new Student("赵六", '男', 95);allStudents[4] = new Student("吴七", '女', 78);allStudents[5] = new Student("钱八", '女', 82);allStudents[6] = new Student("孙九", '男', 64);allStudents[7] = new Student("施十", '女', 21);allStudents[8] = new Student("刘十一", '女', 55);allStudents[9] = new Student("贾十二", '男', 88);//面向接口编程ClassDataInter c = new ClassDataInterImpl2(allStudents);c.printAllStudentInfos();c.printAverageScore();}
}

ClassDataInferImpl1.java 实现类1

public class ClassDataInterImpl1 implements ClassDataInter{//数据传送private Student[] students;public ClassDataInterImpl1(Student[] students){ //有参构造上大分this.students = students;}@Overridepublic void printAllStudentInfos() {System.out.println("全班同学的信息如下:");for(int i=0; i<students.length; ++i){Student s = students[i];System.out.println(s.getName() + s.getGender() + s.getScore());}}@Overridepublic void printAverageScore() {double sum = 0;for(int i=0; i<students.length; ++i){Student s = students[i];sum += s.getScore();}System.out.println("全班同学的平均分为:" + sum/students.length);}
}

在这里插入图片描述

ClassDataInferImpl2.java 实现类2

public class ClassDataInterImpl2 implements ClassDataInter{private Student[] students;public ClassDataInterImpl2(Student[] students){this.students = students;}@Overridepublic void printAllStudentInfos() {int male = 0;int female = 0;System.out.println("全班同学的信息如下:");for(int i=0; i<students.length; ++i){Student s = students[i];if(s.getGender() == '男'){male++;}else{female++;}System.out.println(s.getName() + s.getGender() + s.getScore());}System.out.println("男生" + male + "人, 女生" + female + "人");}@Overridepublic void printAverageScore() {double sum = 0;double max = 0;double min = 100;for(int i=0; i<students.length; ++i){Student s = students[i];if(min > s.getScore()){min = s.getScore();}if(max < s.getScore()){max = s.getScore();}sum += s.getScore();}System.out.println("去掉最高分和最低分, 全班同学的平均分为:" + (sum-max-min)/students.length);}
}

在这里插入图片描述

04 三大新增方法

A.interface 自定义接口

public interface A {//1.默认方法default void go(){ //子类对象调用System.out.println("==go方法执行了==");run();}//2.私有方法private void run(){ //类中方法调用System.out.println("==run方法执行了=="); }//3.静态方法static void show(){ //接口名调用System.out.println("==show方法执行了==");}
}

Test.java

public class Test {public static void main(String[] args) {B b = new B();b.go();A.show();}
}class B implements A{}

05 注意事项

  • 一个接口可以同时继承多个接口
  • 如果多个接口中存在方法签名冲突,则此时不支持多继承,也不支持多实现
  • 如果父类中和接口中有同名的默认方法,实现类会优先用父类的
  • 如果多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可
public class Test {public static void main(String[] args) {C2 c = new C2();c.show();}
}//1
//类与类 单继承 一个类只能继承一个父类
//类与接口 多实现 一个类可以实现多个接口
//接口与接口 多继承 一个接口可以继承多个接口interface A{void show1();
}
interface B{void show2();
}
interface C extends A, B{ //1.多继承void show3();
}class D implements C{@Overridepublic void show1() {}@Overridepublic void show2() {}@Overridepublic void show3() {}
}//2
interface A1{void show();
}
interface B1{//String show(); //2.签名冲突
}class C1 implements A1, B1{@Overridepublic void show() {}
}//3
interface A2{default void show(){System.out.println("==A2的show方法被调用");}
}class B2{public void show(){System.out.println("==B2的show方法被调用"); //3.优先调用父类同名方法}
}class C2 extends B2 implements A2{}//4
interface A3{default void show(){System.out.println("==A3的show方法被调用");}
}interface B3{default void show(){System.out.println("==B3的show方法被调用");}
}class C3 implements A3, B3{public void show(){System.out.println("==C3的show方法被调用"); //4.方法重写}
}

06 抽象类和接口对比

相同点

  • 都是抽象形式,都可以有抽象方法,都不能创建对象
  • 都是派生子类形式:抽象类是被子类继承,接口是被子类实现
  • 一个类继承抽象类或实现接口,都要重写抽象方法
  • 都能多态、解耦合

不同点

  • 抽象类可以定义类的所有普通成员,接口只能定义常量和抽象方法
  • 抽象类只能单继承,接口可以多实现
  • 抽象类适用于模板,实现父类代码的复用性,接口适用于功能,实现实践的灵活性

07 案例:智能家居控制系统

请你开发一个智能家居系统,可以让用户选择要控制的家用设备(吊灯,电视机,洗衣机,落地窗),并可以对它们进行打开或者关闭操作。

① 定义父类”家具“和子类”电视、洗衣机、灯、空调“

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class JD implements Switch{private String name; //设备名称private boolean status; //开关@Overridepublic void press(){status = ! status;}
}
public class Lamp extends JD{public Lamp(String name, boolean status){super(name, status);}
}
public class Fridge extends JD{public Fridge(String name, boolean status){super(name, status);}
}
public class Television extends JD{public Television(String name, boolean status){super(name, status);}
}
public class WashMachine extends JD{public WashMachine(String name, boolean status){super(name, status);}
}

② 创建父类对象,添加子类数据

JD[] jds = new JD[4];
jds[0] = new Television("木之本樱电视机", true);
jds[1] = new WashMachine("五条悟洗衣机", true);
jds[2] = new Lamp("蜡笔小新灯", true);
jds[3] = new Fridge("江户川柯南空调", true);

③ 创建接口”开关“,父类”家具“实现

public interface Switch {void press();
}

④ 创建智能控制系统对象,传递父类对象参数

SmartHomeControl smartHomeControl = new SmartHomeControl();
smartHomeControl.control(jds[0]);
//智能控制系统
public class SmartHomeControl {public void control(JD jd){System.out.println(jd.getName() + "的状态是" + (jd.isStatus() ? "开着" : "关着"));System.out.println("===调整开关===");jd.press();System.out.println(jd.getName() + "的状态是" + (jd.isStatus() ? "开着" : "关着"));}
}

Test.java

public class Test {public static void main(String[] args) {//面向对象编程实现智能家居控制系统//角色:设备(吊灯、电视机、洗衣机、落地窗...)//功能:开关//智能家具控制系统(单例对象)控制家具开关//1.定义父类”家具“和子类”电视、洗衣机、灯、空调“//2.创建父类对象,添加子类数据JD[] jds = new JD[4];jds[0] = new Television("木之本樱电视机", true);jds[1] = new WashMachine("五条悟洗衣机", true);jds[2] = new Lamp("蜡笔小新灯", true);jds[3] = new Fridge("江户川柯南空调", true);//3.创建接口”开关“,父类”家具“实现//4.创建智能控制系统对象,传递父类对象参数SmartHomeControl smartHomeControl = new SmartHomeControl();smartHomeControl.control(jds[0]);}
}

⑤ 升级版:输出所有设备状态,死循环控制单个设备

Test.java

while(true){smartHomeControl.printAllJds(jds);System.out.println("===输入待控制设备编号===");Scanner sc = new Scanner(System.in);int number = sc.nextInt();switch (number){case 0:smartHomeControl.control(jds[0]);break;case 1:smartHomeControl.control(jds[1]);break;case 2:smartHomeControl.control(jds[2]);break;case 3:smartHomeControl.control(jds[3]);break;case -1:System.out.println("===退出智能控制系统===");return; //直接干掉main方法default:System.out.println("===请输入0~3之间的整数===");}
}

SmartHomeControl.java

public void printAllJds(JD[] jds){for(int i=0; i<jds.length; ++i){JD jd = jds[i];System.out.println(jd.getName() + "的状态是" + (jd.isStatus() ? "开着" : "关着"));}
}
http://www.cadmedia.cn/news/6449.html

相关文章:

  • 政府网站建设管理督查通报成都seo优化排名推广
  • 上海2023年建设市场放假时间山东seo优化
  • 平面ui设计网站深圳seo技术
  • 公司logo设计效果图seo收费
  • 住房和城乡建设部官方网站百度集团
  • 设计说明书怎么写seo入门书籍推荐
  • 网站建设详细流程百度关键词指数工具
  • 九江做网站哪家公司好百度seo哪家公司好
  • 中山外贸出口网站建设多少钱哪里有新品牌推广方案
  • 宝鸡网站建设方案seo优化常识
  • 云南建设局网站重庆seo
  • 网站系统繁忙是什么意思线上营销技巧和营销方法
  • 大型网站建设流程百度快照怎么用
  • 营销师是做什么的北京seo排名公司
  • 上海手机网站建设报价bt磁力兔子引擎
  • 成都软件开发公司排行榜武汉seo首页优化技巧
  • 找工作一般上什么网站比较好成人教育培训机构十大排名
  • 网站建设要点百度推广后台登陆
  • 国家市场监督管理总局反垄断局北京优化seo排名优化
  • 宝塔面板windows建站教程广告推广方式有哪几种
  • 大厂县住房和城乡建设局网站168推广网
  • wordpress建站网企业门户网站模板
  • 开源代码seo算法培训
  • 智慧团建学生登录入口手机版怎么做好seo内容优化
  • 网页服务器一年多少钱廊坊seo快速排名
  • 义乌门户网站建设痘痘如何去除效果好
  • shopncwindows优化大师好不好
  • 电子科技技术支持东莞网站建设好网站制作公司
  • 山西专业网站建设价目手机百度下载免费
  • 商城网站建设哪家便宜无人区在线观看高清1080