本篇碎碎念:个人认为压力是一种前进的动力,但是不要有太多压力,不然会使心情烦躁,会控制不住自己的情绪,会在一个临界值爆发,一旦爆发,将迟迟不能消散
今日份励志文案: 努力的背后必有加倍的赏赐
少年要把压力转变为动力哦!!!
目录
抽象类
下面是抽象方法声明采用的语法以及注意事项:(引用了abstrac关键字)
抽象类的总结
接口
interface使用方法:
implements使用方法:
接口的总结
抽象类和接口的区别
Object类(简单了解,具体会在下一章讲解)
抽象类
首先,我们要学习抽象类,尽管在构建具有某些未实现方法的类时,你的第一想法可能是创建接口,但是抽象类仍旧是用于此目的的一种重要的工具。因为你不可能总是使用纯接口
抽象类:如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
不同的子类可以用不同的方式表示此接口,通用接口建立起一种基本形式,以此表示所有导出类的共同部分,我们创建抽象类是希望通过这个通用接口操作一系列类,为此Java提供了一个叫抽象方法的机制,这种方法是不完整的,仅有声明没有方法体
下面是抽象方法声明采用的语法以及注意事项:(引用了abstrac关键字)
abstract class 函数名{
abstract void Dog();
}
1.方法被abstract修饰,包含abstract这个类也必须被abstract修饰
代码演示:
2.抽象类不能被实例化
代码演示:
3.如果一个普通类继承了一个抽象类,那么此时,这个类必须重写这个抽象方法
代码演示:
重写之后的代码
public static void main(String[] args){
Ball ball=new Basketball() ;
ball.play();
}
这里运用了向上转型:简单介绍一下,父类引用指向子类对象,具体在博主上一篇Java入门篇 之 多态中有详细介绍
4.抽象类和普通类的区别在于:
(1)可以个普通类一样,有成员变量和成员方法
(2)就是多了抽象方法
(3)多了不能实例化
5.什么情况下要设计为抽象类
如果这个类不能描述一个具体的对象,那么就可以描述为抽象类
对于抽象类使用的代码如下:
abstract class Ball{
public String name;
abstract void play();{
}
}
class Basketball extends Ball{
@Override
void play() {
System.out.println("打篮球");
}
}
class Football extends Ball{
@Override
void play() {
System.out.println("踢足球");
}
}
class Volleyball extends Ball{
@Override
void play() {
System.out.println("打排球");
}
}
public static void output(Ball ball){
ball.play();
}
public static void main(String[] args){
Ball ball1=new Basketball() ;
Ball ball2=new Football() ;
Ball ball3=new Volleyball() ;
ball1.play();
ball2.play();
ball3.play();
//这是第二种输出方式借用output输出
//注意,函数类型是静态的才可以哦,不然会报错的
//如果问为什么?
//博主回答,静态方法在访问本类的成员时,只允许访问静态成员
//而不允许访问实例成员和实例方法
Ball[] ball={ball1,ball2,ball3};
for (Ball a:ball) {
output(a);
}
}
看完这个代码,你们有没有认为这个代码与多态的代码很像呢?
没错这个就是多态,多态就是一个对象在不同条件下的表现出的不同形式
抽象类的总结
1.被abstract 修饰的方法叫做抽象方法,没有具体的实现的
2.如果一个类 包含了这个抽象方法,此时这个类也必须得用abstract修饰。此时这个类被叫做抽象类
3.抽象类当中 可以有和普通类当中一样的成员变量和成员方法
4.和普通类不一样的地方就是这个抽象类不能被实例化
5.当一个普通类继承了这个抽象类,那么这个普通类必须重写抽象方法。 abstract class Perso
6.抽象方法不能被private修饰,final修饰,static修饰7抽象类当中可以包含构造方法,这个构造方法并不是在实例化这个抽象类的时候使用,因为他就不能被实例化。那么这个构造方法,主要是在子类当中让子类调用,帮助父类进行初始化。
接口
abstract关键字允许人们在类中创建一个或多个没有任何定义的的方法----提供了接口部分,但是没有提供任何相应的具体实现,这些实现是由此类的继承者创建的
interface这个关键字产生了一个完全抽象的类,他根本就没有提供任何具体实现。它允许创建者确定方法名,参数列表和返回类型,但是没有任何方法体,接口只提供了形式,而未提供任何具体实现
任何使用某特定接口的代码都知道可以调用该接口的哪些方式,而且仅需知道这些。因此接口被用来建立类与类之间的关系
要让一个类寻准某个特定接口(或者是一组接口),需要用implements关键字,他表示interface只是他的外貌,但是现在我要声明它是任何工作的,它看起来还很像继承
interface使用方法:
public interface 接口名称{
//抽象方法
public abstract void method1();
public void method2();
abstract void method3();
void method4();
}
public abstract 是固定搭配,可以不写
在接口中上述写法都是抽象方法,更推荐方式4,代码更简洁
接口不能直接使用,必须要有一个"实现类"来"实现"接口,实现接口中所有的抽象方法
implements使用方法:
public class 类名称 implements 接口名称{
//...
}
注意;子类和父类是extends继承关系,类与接口是implements实现关系
代码演示:
class Instrument{
public String name;
public Instrument(String name){
this.name=name;
}
}
interface Play{
void play();
}
interface Knock{
void knock();
}
interface Pull{
void pull();
}
class Guitar extends Instrument implements Play,Knock{
public Guitar(String name){
super(name);
// 在给实现子类的构造方法前
// 先要用super()调用实现父类的构造方法
// 因为父类自己定义了构造方法
// 编译器不会自动给给子类构造方法中添加super();
}
@Override
public void play() {
System.out.println("弹"+this.name);
}
@Override
public void knock() {
System.out.println("敲"+this.name);
}
}
public class demo8 {
public static void main(String[] args){
//实例化对象
Guitar guitar=new Guitar("吉他");
guitar.play();
guitar.knock();
}
}
接口的总结
1.定义接口的时候使用关键字interface 来定义
2.接口当中的方法如果没有被实现,那么他默认就是一个抽象方法。
3.接口当中的方法不能有具体的实现
4.如果要有具体的实现,那么必须是由default修饰或者是由static修饰
5.接口当中定义成员变量默认都是public static final的
6.接口当中的抽象方法默认都是public abstract修饰的
7.接口是不可以被实例化的
8.类和接口之间的关系可以使用implements来关联
9.接口也是可以产生字节码文件的
10.一个类 可以继承一个抽象类/普通类同时还可以实现这个接口
抽象类和接口的区别
1.抽象类当中 可以包含和普通类一样的成员变量和成员方法,但是接口当中的成员变量只能是 public static final的方法只能是public abstract的
2.一个类只能继承一个抽象类,但是能够同时实现多个接口,所以解决了java当中不能进行多继承的特性
Object类(简单了解,具体会在下一章讲解)
Object是Java默认提供的一个类(是所有类的先祖)
Java里面出来Object类,所有的类都是存在继承关系的,米热播会继承Object父类。即所有类的对象都可以使用Object的引用接收
接口间的继承
在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承,
在实例内部类当中,定义一个静态的成员变量,必须是一个常量
Public static final int date=1;
如果有解释的不对或者不清晰,如果可以从评论区指出,我一定会加以修改,万分感谢
希望对你们有所帮助