Java 基础知识点 笔记总结 (五),CSS的文本样式属性值

6. 抽象类 和 抽象方法

===========================================================================


abstract关键字可以用来修饰:类,方法。

abstract关键字:修饰类(抽象类)

  • abstract声明的类不能被实例化(不能创建对象)。

  • 抽象类中一定有构造器!虽然自己不能定义对象了,但是子类还是要用的!!!

  • 开发中,一定提供抽象类的子类,让子类对象实例化,完成相关操作。

abstract关键字:修饰方法(抽象方法)

  • 抽象方法只有方法的声明,没有方法体!!

  • 包含抽象方法的类,一定是一个抽象类。反之,抽象类中是可以没有抽象方法。

  • 当然,如果父类是抽象类里面还有抽象方法,这样子类要么重写这个抽象方法,要么将子类也定义为abstract抽象类。

package com.itholmes.p2;

public class AbstractTest {

public static void main(String[] args) {

//因为抽象类是不能实例化的

// PersonX p1 = new PersonX();

// p1.eat();

}

}

abstract class PersonX {

String name;

int age;

public PersonX() {

}

public PersonX(String name,int age) {

this.name = name;

this.age = age;

}

public abstract void eat();

public void walk() {

System.out.println(“人们走路”);

}

}

//要么将该类定义为抽象类(因为父类含有抽象类)

abstract class Student extends PersonX{

public Student(String name,int age) {

super(name,age);

}

//要么重写eat()类

// @Override

// public void eat() {

// System.out.println(“学生吃饭”);

// }

}

在这里插入图片描述

在这里插入图片描述


abstract的注意事项:

  • abstract不能用来修饰:属性,构造器等结构。

  • abstract不能用来修饰私有方法(private不能被重写),静态方法(子父类的同名同参数的静态方法,不能重写!),final的方法和类。

7. 匿名类

====================================================================

对于abstract声明的类,不能创建对象,但是可以创建一个匿名类的对象。

package com.itholmes.p2;

public class AbstractTest {

public static void main(String[] args) {

//这就是一个匿名的子类对象:p

PersonX p = new PersonX() {

@Override

public void eat() {

System.out.println(“匿名类创建”);

}

};

}

}

abstract class PersonX {

String name;

int age;

public PersonX() {

}

public PersonX(String name,int age) {

this.name = name;

this.age = age;

}

public abstract void eat();

public void walk() {

System.out.println(“人们走路”);

}

}

在这里插入图片描述

8. 模板方法设计模式

=========================================================================


其实整体上,就是通过继承外加abstract抽象方法,来实现一种模板方式。

就像下面代码的code()部分一样。

package com.itholmes.p2;

public class TemplateTest {

public static void main(String[] args) {

Template tem = new SubTemplate();

tem.spendTime();

}

}

abstract class Template{

public void spendTime() {

long start = System.currentTimeMillis();

//这里的code代码就是不确定的部分。

this.code(); //this指的就是当前对象,这里指的就是tem,tem.code()是重写后的code方法。

long end = System.currentTimeMillis();

System.out.println(“花费的时间为:”+ (end - start));

}

public abstract void code();

}

class SubTemplate extends Template{

@Override

public void code() {

for(int i=2;i<=1000;i++) {

boolean isFlag = true;

for(int j=2;j<=Math.sqrt(i);j++) {

if(i%j ==0) {

isFlag = false;

break;

}

}

if(isFlag) {

System.out.println(i);

}

}

}

}

9. 接口

===================================================================


接口和类是两个并列的结构。

在这里插入图片描述

在这里插入图片描述


JDK7 以前版本仅仅定义了全局常量和抽象方法:

  • 全局常量:public static final的类型,可以省略不写。

  • 抽象方法:public abstract的类型,也可以省略不写。


JDK8除了定义全局常量和抽象方法,还定义了静态方法,默认方法。

  • 接口不能定义构造器。意味着接口不能实例化。

  • Java开发中,接口通过让类去实现(implements)的方法来使用。

  • 需要注意的是,如果实现类对应接口有抽象方法,就要对应对抽象方法的重写或将实现类定义为抽象方法。

  • 可以implements多个接口,弥补了Java单继承性的局限性。

格式:class 类名 extends 父类 implements 接口1,接口2,接口3

  • 接口和接口之间是可以继承的,多继承。

  • 接口具有多态性,因此,实现类可以对应接口创建对象。

10.接口 匿名类和匿名对象

===========================================================================

主要四种情况:

package com.itholmes.p2;

public class USBTest {

public static void main(String[] args) {

Computer com = new Computer();

//1.创建了接口的非匿名实现类的非匿名对象

Flash flash = new Flash();

com.transferDate(flash);

//2.创建了接口的非匿名实现类的匿名对象

com.transferDate(new Printer());

//3.创建了接口的匿名实现类的非匿名对象

USB phone = new USB() {

@Override

public void start() {

// TODO Auto-generated method stub

System.out.println(“手机开始工作”);

}

@Override

public void stop() {

// TODO Auto-generated method stub

System.out.println(“手机结束工作”);

}

};

com.transferDate(phone);

//4. 创建了接口的匿名实现类的匿名对象

com.transferDate(new USB() {

@Override

public void start() {

// TODO Auto-generated method stub

System.out.println(“MP4开始工作”);

}

@Override

public void stop() {

// TODO Auto-generated method stub

System.out.println(“MP4结束工作”);

}

});

}

}

class Computer{

public void transferDate(USB usb) {

usb.start();

System.out.println(“具体传输数据的细节”);

usb.stop();

}

}

interface USB{

void start();

void stop();

}

class Flash implements USB{

@Override

public void start() {

// TODO Auto-generated method stub

System.out.println(“U盘开始工作”);

}

@Override

public void stop() {

// TODO Auto-generated method stub

System.out.println(“U盘结束工作”);

}

}

class Printer implements USB{

@Override

public void start() {

// TODO Auto-generated method stub

System.out.println(“打印机开始工作”);

}

@Override

public void stop() {

// TODO Auto-generated method stub

System.out.println(“打印机结束工作”);

}

}

11. 接口应用 代理模式(Proxy)

==================================================================================

代理模式,就是为其它对象提供一种代理以控制对这个对象的访问。 理解好,代理类和非代理类就可以了。

package com.itholmes.p2;

public class NetWorkTest {

public static void main(String[] args) {

Server server = new Server();

new ProxyServer(server);

}

}

interface NetWork{

public void browse();

}

//被代理类

class Server implements NetWork{

@Override

public void browse() {

// TODO Auto-generated method stub

System.out.println(“真实的服务器访问网络”);

}

}

//代理类

class ProxyServer implements NetWork{

private NetWork work;

public ProxyServer(NetWork work) {

this.work = work;

}

public void check() {

System.out.println(“联网之前的检查工作”);

}

@Override

public void browse() {

check();

// TODO Auto-generated method stub

work.browse();

}

}

12. 接口应用 工厂模式

===========================================================================


工厂模式:实现创建者与调用者的分离,即将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

就是实现分工的一个效果。

在这里插入图片描述

需要注意xxxFactory这个类,一般都是什么工厂,就是一个工厂类,用来造东西的。


简单工厂模式:

在这里插入图片描述

在这里插入图片描述


工厂方法模式:

在这里插入图片描述


抽象工厂模式:

在这里插入图片描述

13. 接口 问题

=======================================================================


继承和接口同时出现相同变量的问题:

在这里插入图片描述


在这里插入图片描述

首先,上面的play()方法,虽然有两个play(),但是重写的play()覆盖了接口上面的两个,是没有问题的!

有问题的是:Ball定义在了接口,接口是public abstract final的!!!因此不能被重新赋值!

在这里插入图片描述

14. JDK8接口 新特性

============================================================================


接口的静态方法:

  • 接口种定义的静态方法只能通过接口来调用。而不能通过实现类来调用。

接口的默认方法:

  • 通过实现类的对象,可以调用接口中的默认方法。

  • 默认方法可以被重写的。

  • 如果子类继承的父类和实现的接口声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。(这就是一个类优先原则)


接口默认方法的接口冲突:

如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么实现类没有重写此方法的情况下会报错!

解决办法:很简单就是重写方法就可以了。

在这里插入图片描述

15. 内部类

=====================================================================


Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类。

内部类有两种:

  • 成员内部类:直接定义在类里面,方法外,构造器外,代码块外的类。

  • 局部内部类:方法内,代码块内,构造器内的类。


成员内部类可以做的事情:

在这里插入图片描述


创建非静态成员内部类和创建静态成员的内部类形式:

package com.itholmes.p3;

public class InnerClassTest {

//创建PersonX实例(静态的成员内部类)

//静态内部类可以直接定义

Person.PersonX x = new Person.PersonX();

//创建PersonY实例(非静态的成员内部类)

//但是非静态内部类不可以直接定义,因为它必须有一个对象来调用这个内部类才可以

//Person.PersonY y = new Person.PersonY();

Person p = new Person();

Person.PersonY y = p.new PersonY();

}

class Person {

//静态成员内部类

static class PersonX{

}

//非静态成员内部类

class PersonY{

}

public void method() {

//局部内部类(方法内部)

class AA{

}

}

{

//局部内部类(代码块内)

class BB{

}

}

public Person() {

//局部内部类(构造器内部)

class CC{

}

}

}


如何调用外部类,内部类,甚至形参的一些同名属性:

就是使用this和类名.this来调用。

在这里插入图片描述


返回一个实现Comparable接口的类的对象的方法:

//方式一:

//返回一个实现Comparable接口的类的对象的方法:

public Comparable getComparable() {

class MyComparable implements Comparable{

@Override

public int compareTo(Object o) {

// TODO Auto-generated method stub

return 0;

}

}

return new MyComparable();

}

//方式二:(匿名)

public Comparable getComparable() {

return new Comparable() {

@Override

public int compareTo(Object o) {

// TODO Auto-generated method stub

return 0;

}

};

}


抽象类和接口的共同点和区别:

在这里插入图片描述


在局部内部类的方法中,如果调用局部内部类所声明的方法中的局部变量的话,要求此局部变量必须声明final的(JDK8版本以上,默认就是final!),这就是一个规定。

package com.itholmes.p3;

public class InnerClassTest {

public void method() {

//方法内部的局部变量

int num = 10;

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

最后

文章到这里就结束了,如果觉得对你有帮助可以点个赞哦

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

ublic int compareTo(Object o) {

// TODO Auto-generated method stub

return 0;

}

};

}


抽象类和接口的共同点和区别:

在这里插入图片描述


在局部内部类的方法中,如果调用局部内部类所声明的方法中的局部变量的话,要求此局部变量必须声明final的(JDK8版本以上,默认就是final!),这就是一个规定。

package com.itholmes.p3;

public class InnerClassTest {

public void method() {

//方法内部的局部变量

int num = 10;

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-Kt8L4gb6-1710598621485)]
[外链图片转存中…(img-DuZhfq0g-1710598621485)]
[外链图片转存中…(img-A5SJKEz7-1710598621486)]
[外链图片转存中…(img-5wh0S8gs-1710598621486)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-1nuMh2NR-1710598621487)]

最后

文章到这里就结束了,如果觉得对你有帮助可以点个赞哦

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-adF5Tncs-1710598621487)]

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值