GVKun编程网logo

Java 抽象类和接口详解(java 抽象类和接口详解区别)

1

本文将分享Java抽象类和接口详解的详细内容,并且还将对java抽象类和接口详解区别进行详尽解释,此外,我们还将为大家带来关于###Errorqueryingdatabase.Cause:java.l

本文将分享Java 抽象类和接口详解的详细内容,并且还将对java 抽象类和接口详解区别进行详尽解释,此外,我们还将为大家带来关于### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: cn.xiaojian.blog.po.BlogType and java.lang.String ### Cause: java.lang.IllegalArgumentException: ...、'java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”、(Java 学习笔记) Java Threading (Java 线程)、Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8的相关知识,希望对你有所帮助。

本文目录一览:

Java 抽象类和接口详解(java 抽象类和接口详解区别)

Java 抽象类和接口详解(java 抽象类和接口详解区别)

一。抽象类

(1)定义

抽象,就是不够具体
在人脑中,很多的概念其实也是抽象的,例如动物,水果
使用了关键词 abstract 声明的类叫作 “抽象类”。

 

(2)语法体现

abstract - 抽象的
可以修饰类也可以修饰方法

1 抽象类不能创建实例,一般用来做为父类,封装子类共有一些属性和方法
2 抽象的父类中经常定义一些抽象方法,用来给子类写重写覆盖,这样子类可以体现不同的实现细节,子类必须重写父类中抽象的方法

除非该子类也是抽象类

abstract class Animal{
private String name;
private int age;

public abstract void sleep();

public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}

public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}

 

 

(3)更多的语法限制

1 abstract 不能与 final 连用:abstract 目的是让人家继承的,final:目的是不让人家继承的
2 abstract 不能与 static 连用:abstract 修饰的方法是不用实现的抽象方法。static 修饰的方法要实现的类方法
3 如果一个类有一个抽象方法,该类就必须定义成抽象类
4 子类继承抽象的父类,必须重写父类中的所有抽象方法,除非这个子类也是抽象类
5 抽象的子类继承抽象父类,那么可以重写父类中的部分抽象方法,或者不重写
6 抽象类可以继承一个非抽象类
7 抽象类里可以没有抽象方法

(4)使用例子

abstract class Printer{
  public abstract void print(Ticket t);
}

Printer p = new ?();
p.print(t);

模板设计模式
  一个模板方法,里面包含多个细节步骤,这些步骤是不知道如何具体实现,给子类实现
public abstract class Template{
  public final void template(){
     m1();
     m2();
     m3();
     m4();
  }
  public abstract void m1();
  public abstract void m2();
  public abstract void m3();
  public abstract void m4();

  
}
  }
 

 

(5)抽象类意义

1 抽象的,高层的类能够代表更宽的范围,不容易出错
2 抽象类可以在后期的需求变化用不同的子类来代替,这样使我们的程序更加灵活

class 派叫号系统{
HPPrinter p = new HPPrinter()
p.print(t);
}

class 派叫号系统2{
BrotherPrinter p = new BrotherPrinter()
p.print(t);
}

class 派叫号系统3{
XxxxPrinter p = new XxxxPrinter()
p.print(t);
}


class 派叫号系统{
Printer p = new ???();
p.print(t);
}

 

二。接口

(1)定义与语法

为什么使用接口?
例子:要求实现防盗门的功能
分析:门有 “开” 和 “关” 的功能,锁有 “上锁” 和 “开锁” 的功能。
将门和锁分别定义为抽象类
防盗门可以继承门的同时又继承锁吗?如何实现多继承??
如何解决这个问题呢?
1. 将门定义为抽象类,锁定义为接口
2. 防盗门继承门,实现锁的接口

 

因为 java 不支持多继承,只能继承一个,所以继承名额是宝贵的,有了接口,就能实现接口,就不用占用宝贵的继承名额了

语法:
public interface MyInterface {
// 所有方法都是:public abstract
public void foo (); // 其他方法
}
必须知道的接口特性:
接口不可以被实例化
实现类必须实现接口的所有方法,除非实现类是抽象类。
实现类可以实现多个接口
接口中的变量都是静态常量

(2)语法限制

1 实现一个接口就必须实现这个接口所有方法,除非它是一个抽象类
2 一个类是不能继承多个类 (单继承),可以避免很多问题,接口可以继承多个接口
3 类不能继承接口,接口也不能继承类(类继承父类。)
4 一个类可实现多个接口
5 实现接口的方法,访问控制符不能更窄。

(3)使用例子

1. 接口是一种约定:大小,针数量。
生活中,我们使用的两相电源插座,规定了:两个接头间的额定电压两个接头间的距离接头的形状
程序设计时面向接口的约定而不考虑具体实现
2. 接口表示一种能力



接口表示一种能力。

 

 


需求说明:原始的手机,可以发短信,通电话。随着发展,手机增加了功能:音频、视频播放、拍照、上网。

 

 


接口是一种约定:

 

墨盒和纸张的规格是一种约定 打印机需要遵守这些约定
用面向接口编程的方式开发制定墨盒、纸张的约定或标准
打印机厂商使用墨盒、纸张的标准开发打印机
其他厂商按照墨盒、纸张的标准生产墨盒、纸张
实现步骤:
定义墨盒接口 InkBox
定义纸张接口 Paper
定义打印机类
实现墨盒接口
实现纸张接口

(4)接口回调

回头调用
一个类依赖接口,这个类可以提前写好,过了很久之后 ,有人需要让这个类去运行,他做为后来者,只需提供一个实现了该接口的类,就可以让这个类去运行。这就是接口回调。

 

 

(5)抽象类和接口的区别 (面试)

很多时候我们都将抽象类和接口混淆,如果分不出定义抽象类和接口的时候,最好直接定义为接口,为了保留有限而且宝贵的 java 单继承天性。

1 语法区别
1)抽象类可以包含具体方法,但接口中所有的方法都必须抽象的
2)一个类只继承一个抽象类 ,但是可以实现多个接口
3)抽象类实现接口,反之,接口不能继承抽象类,接口可以继承多个接口。
4)抽象类定义的成员变量就是普通的实例变量,接口中定义的成员变量会变成静态常量
5) 抽象类可以有具体的方法,这些具体的方法里面就可以写一些共性代码,这样子类就可以继承下来,避免重复代码,有的时候会用抽象类来代替接口

2 语义区别
is a 继承关系
has a 实现关系

interface Alert
报警
abstract Door
打开
关闭
AlertDoor extends Door implements Alert
报警
打开
关闭

接口 Fighter {
fight()
}
学生 implements Fighter {}
study()
fight()
黑社会分子 implements Fighter {}
fight()

接口 Flyable {
fly()
}
飞机 implements Flyable {
fly()
}
鸟 implements Flyable {
fly()
}

超人 implements Flyable {
fly()
}

连接数据库
接口 Driver {
connection()
}

Mysql 驱动 implements Driver {
connection()
}

Oracle 驱动 implements Driver {
connection()
}

Sql Server 驱动 implements Driver {
connection()
}


(6)广义接口定义

1 代表一个类,一个方法,或者 java 中的 interface
2 通信协议
3 数据接口 (比如 json 格式的数据接口)
4 用户界面 (用户接口 UI = User Interface) UI

 

 

### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: cn.xiaojian.blog.po.BlogType and java.lang.String ### Cause: java.lang.IllegalArgumentException: ...

### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: cn.xiaojian.blog.po.BlogType and java.lang.String ### Cause: java.lang.IllegalArgumentException: ...

### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: cn.xiaojian.blog.po.BlogType and java.lang.String
### Cause: java.lang.IllegalArgumentException: invalid comparison: cn.xiaojian.blog.po.BlogType and java.lang.String] with root cause
java.lang.IllegalArgumentException: invalid comparison: cn.xiaojian.blog.po.BlogType and java.lang.String
at org.apache.ibatis.ognl.OgnlOps.compareWithConversion(OgnlOps.java:92)
at org.apache.ibatis.ognl.OgnlOps.isEqual(OgnlOps.java:142)
at org.apache.ibatis.ognl.OgnlOps.equal(OgnlOps.java:794)
at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:53)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)
at org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:61)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:494)
......

  在MVC开发中习惯使用原有的类作为传参方式:

  javaBean:

  

分享图片

 

 

   该javaBean上建立扩展类:

   

分享图片

 

 

    数据库中,blog表和blogType表存在外键关系,所以在blog类的实现上,要建立一个blogType的类做属性。

   在该查询中,显示的异常信息可知,invalid comparison: cn.xiaojian.blog.po.BlogType and java.lang.String,不能比较(blogType和String)

分享图片

 

   sql语句的拼接中,判断该类是否为空就行了,我就照着前面的一路CV,从而忽略了这个错误(根本是没注意到这样的问题)。

  所以这里要注意啊:代码套路深,CV需谨慎啊。CV自己的代码都能坑死自己啊。

  日常报错ing,吸取更多的教训,写出更优雅的代码,同时希望能帮助到同是坎坷路上的码友们。

'java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”

'java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”

如何解决''java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”?

我收到此错误,我已阅读该错误以解决它我必须将 import java.util.Base64 替换为 import android.util.Base64 但在我的整个项目中我只发现 Base68 result = Base64.getEncoder().encodetoString(macData); 的唯一用法 我该如何解决?而且我不能用 android.util.Base.64 替换 java.util.Base64 因为这行代码在后端

解决方法

这很不幸 - 这意味着您正在使用某个库,而那个库正在尝试使用 /i。 Android 选择了 Java 库,就像 android 发布时一样,现在已经是很久以前的事了。从那以后它们就没有真正更新过。 (那个 oracle v google 法庭案件可能没有帮助……)

java.util.Base64 已添加到 https://forge.autodesk.com/en/docs/design-automation/v3/reference/cmdLine/cmdLine-inventor/(有关此信息,请参阅 javadoc 中的“since”行;任何“1.6”或以下,或者如果没有“since”行,肯定可用在 android 上。其他东西通常不是)。 java 8 现在已经 7 岁了,因此不是专门为 android 设计的库越来越有可能开始使用这些非 android 库调用。

检查堆栈跟踪,您会找到正在执行此操作的库。恐怕除了停止使用这个库之外别无他法。您可以尝试在您的应用程序中粘贴 juBase64 impl,但这会相对棘手,因为这可能涉及一些法律问题,因此,要么没有人这样做,要么如果他们这样做,他们可能不会宣传如何。

您可以要求这个库使用第三方库来做 base64 工作,但他们可能不想这样做,这可能不是库无法在 android 上运行的唯一问题。

如果 android 变体是一个替代品,你可以重写这个库的类文件,但这也是一个有点笨拙、笨拙的概念,并不完全困难,但因为这不是一件正常的事情,而且通常积极不喜欢,我认为您无法轻松找到有关如何操作的文档。

因此,建议:尝试寻找另一个图书馆。

(Java 学习笔记) Java Threading (Java 线程)

(Java 学习笔记) Java Threading (Java 线程)

Java Threading (Java 线程)

● Process & Thread

Processes are the abstraction of running programs: A binary image, virtualized memory, various kernel resources, an associated security context, and so on.

Threads are the unit of execution in a process: A virtualized processor, a stack, and program state.

 

Threads are sometimes called lightweight processes. Both processes and threads provide an execution environment, but creating a new thread requires fewer resources than creating a new process.

Threads exist within a process — every process has at least one. Threads share the process''s resources, including memory and open files. This makes for efficient, but potentially problematic, communication.

 

Multithreaded execution is an essential feature of the Java platform. Every application has at least one thread — or several, if you count "system" threads that do things like memory management and signal handling. But from the application programmer''s point of view, you start with just one thread, called the main thread. This thread has the ability to create additional threads, as we''ll demonstrate in the next section.

 

● Processes

--Will by default not share memory

--Most file descriptors not shared

--Don''t share filesystem context

--Don''t share signal handling

 

● Threads

--Will by default share memory

--Will share file descriptors

--Will share filesystem context

--Will share signal handling

 

● Thread pool

Thread pool represents a group of worker threads that are waiting for the job and reuse many times,

 

● Thread life cycle & states

 

 

Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8

Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8

如何解决Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8?

我在这里可以用于 Android 应用程序开发的最大版本是多少。 我正在开发一个 Android 库,我想知道我是否设置了我的库 build.gradle

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

它将与 Android 应用程序中定义的所有先前和更高版本的 Java 版本兼容吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

今天的关于Java 抽象类和接口详解java 抽象类和接口详解区别的分享已经结束,谢谢您的关注,如果想了解更多关于### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: cn.xiaojian.blog.po.BlogType and java.lang.String ### Cause: java.lang.IllegalArgumentException: ...、'java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”、(Java 学习笔记) Java Threading (Java 线程)、Android 应用程序开发支持哪些 Java 版本我可以使用 1.8 以上的 java 版本还是 java 8的相关知识,请在本站进行查询。

本文标签: