通城做网站的,WordPress随机句子,超级简历免费模板,保定建设网站及推广文章目录 前言一、抽象类1.1抽象类概念1.2抽象类语法1.3抽象类特性1.4抽象类的作用 结语 前言
在之前我们对Java的继承与多态特性进行了一定的了解#xff0c;今天我们来继续深入学习内容——抽象类。本篇文章将详细介绍Java语言中的抽象类abstract的概念、语法、特性与作用今天我们来继续深入学习内容——抽象类。本篇文章将详细介绍Java语言中的抽象类abstract的概念、语法、特性与作用让我们开始吧 一、抽象类
1.1抽象类概念
在面向对象的概念中所有的对象都是通过类来描绘的但是并不是所有的类都是用来描绘对象的。 如果一个类中没有包含足够的信息来描绘一个具体的对象那么这样的类就被称为抽象类。 比如 思路分析 1.Animal是动物类每个动物都有叫的方法但由于Animal不是一个具体的动物因此其内部bark()方法无法具体实现。 2.Dog是狗类首先狗属于动物因此与Animal是继承关系其次狗是一种具体的动物“汪汪汪”叫则bark()方法可实现。 3.Cat是猫类首先猫是动物因此与Animal是继承关系其次猫是一种具体的动物“喵喵喵“叫其bark()可以实现。 4.结合上面抽象类的概念发现Animal可以设计为”抽象类“。 代码如下
class Animal{public void bark(){System.out.println(喊叫....);}
}
class Dog extends Animal{Overridepublic void bark(){System.out.println(正在旺旺叫.....);}
}class Cat extends Animal{Overridepublic void bark(){System.out.println(正在喵喵叫.....);}
}
public class test1 {public static void main(String[] args) {Animal animal1 new Dog();Animal animal2 new Cat();animal1.bark();animal2.bark();}
}
我们可以发现父类Animal的bark方法并没有实际工作主要的都是由子类中的bark方法实现的。 对于这种没有实际工作的方法我们可以设计成一个抽象方法abstract method而包含抽象方法的类我们称之为抽象类abstract class。
1.2抽象类语法
在Java中一个类如果被一个abstract修饰则称为抽象类。
抽象类中被abstract修饰的方法被称为抽象方法。抽象方法不用给出具体的实现体。根据以上知识进行代码优化
//修改前
class Animal{public void bark(){System.out.println(喊叫....);}
}//修改后
abstract class Animal{public abstract void bark();//被abstract修饰的类没有实现体
}注意抽象类也是类内部可以包含普通方法和属性甚至构造方法
1.3抽象类特性
抽象类不能直接实例化对象
public class test2 {public static void main(String[] args) {Animal animal new Animal(1,1);animal.bark();}
}但前面我们提到过抽象类也是类可以存在构造方法。 这里说不能直接实例化对象重点在于这个“直接”。 抽象类当中可以有构造方法但是这个构造方法并不是在实例化这个抽象类的时候使用因为他就不能被实例化。实际上是子类继承该构造方法通过子类调用在子类中间接对该抽象类进行实例化。 抽象方法是不能是private的 会出现编译出错 Error:(4, 27) java: 非法的修饰符组合: abstract和private 抽象方法不能被final和protected修饰 会出现编译出错 Error:(20, 25) java: 非法的修饰符组合: abstract和final Error:(21, 33) java: 非法的修饰符组合: abstract和static抽象类必须被继承并且继承后子类要重写父类中的所有抽象方法否则子类也是抽象方法必须要使用abstract修饰
1.4抽象类的作用
抽象类本身不能被实例化要想使用只能常见该抽象类的子类然后让子类重写抽象类中的抽象方法。 但实际感受下来会发现明明普通的类也可以被重写也可以被继承那为什么要有抽象类和抽象方法这么个东西呢 确实如此但使用抽象类修饰相当于多了一层编译器的校验。 其实很多语法存在的意义就是为了”预防出错“我们曾经谈到的final关键字也是类似创建的变量用户不去修改就等同于常量但加上final之后能在后续代码不小心误修改的时候让编译器及时提醒我们。 充分利用编译器的校验在实际开发中是很有意义的哦。 结语
好了以上就是本篇“【Java】嚼烂基础之抽象类”博客的全部内容啦感谢各位的阅读v如有不足之处欢迎在评论区指出哦 觉得有帮助的话别忘了点赞三连支持一下欧拜托啦这对我真的很重要o(ω )o!