25、Java面向对象——抽象类和抽象方法、接口
目录
课前先导
一、抽象方法
1、定义
2、语法格式
3、抽象方法与普通方法的区别
二、抽象类
1、定义
2、语法格式
3、 抽象类和普通类的区别
4、为什么使用抽象类
三、代码演示
1、创建抽象类
2、创建抽象类的子类
3、创建测试类及运行结果
四、利用多态实现抽象类实例化
五、接口
1、接口定义
2、语法格式
3、接口的特点
六、类实现接口
1、语法格式:
2、代码演示
七、利用多态实例化接口
八、接口与抽象类
1、接口与抽象类的相似之处
2、接口与抽象类的区别
课前先导
前面我们学习了继承,在继承的方法重写中,当父类中的方法不满足子类的需求时,进行方法重写,但我们的父类中我们也给了方法体,但如果整个项目不需要去实现它,那定义的方法体就失去了意义。
一、抽象方法
1、定义
英文单词: abstract 抽象的
(1)在Java中,当一个类的方法被abstract关键字修饰时,该方法称为抽象方法;
(2)当一个方法被定义为抽象方法后,意味着该方法不会有具体的实现(没有方法体),而是在抽象类的子类中通过方法重写进行实现;
(3)抽象方法没有方法体。
2、语法格式
访问权限修饰符 abstract 返回值类型 方法名(参数列表);
3、抽象方法与普通方法的区别
(1)抽象方法需要用abstract修饰,普通方法不需要;
(2)抽象方法没有方法体,普通方法有方法体;
(3)抽象方法所在的类必须定义为抽象类,普通方法可以出现在抽象类和普通类;
(4)抽象方法必须要在子类中重写,如果子类不实现(重写),子类要定义为抽象类;
(5)抽象方法不可以用private修饰符修饰,普通方法可以;
(6)abstract修饰符和final关键字不能同时使用。
二、抽象类
1、定义
在Java中,当一个类被abstract关键字修饰时,该类称为抽象类。
2、语法格式
访问权限修饰符 abstract class 类名{
//代码块
};
3、 抽象类和普通类的区别
(1)抽象类需要用abstract修饰,普通类不用;
(2)抽象类不可以实例化(生成对象),普通类可以实例化;
(3)抽象类中可以包含抽象方法和普通方法,普通类中不能包含抽象方法;
(4)抽象类中可以包含普通类的一切成员;
(5)抽象类不能被密封(使用private).
4、为什么使用抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的;但反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
一般我们的父类并没有包含子类的特有的属性和方法,所以父类没有足够的信息来描述子类的对象,所以父类可以定义为抽象类。
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
比如我们吃饭,但我们每个人吃的都不一样,吃饭就是抽象的,每个人吃什么是具体的,所以抽象的概念他没有具体的概念,抽象概念的抽象类是不能够实例化的。
就像父类定义了一个方法,父类不需要实现什么方法,但所有子类都有这个共同的方法名且实现的方法体不同,我们就把这个方法定义为抽象方法。
三、代码演示
1、创建抽象类
(1)我们先创建一个普通类,给它定义一个抽象方法
类和方法都报错了,因为有抽象方法一定是抽象类
(2)给抽象类中定义一个普通方法
2、创建抽象类的子类
(1)我们先创建一个子类
因为没有重写父类中的抽象方法,所以报错了
(2)重写父类中的抽象方法,并定义个子类特有的方法
public class Cat extends Animal{//重写@Overridepublic void eat() {System.out.println("猫吃鱼");}//特有方法public void action(){System.out.println("练瑜伽");}}
3、创建测试类及运行结果
(1)创建测试类并创建父类的对象
报错了,因为抽象类不能被实例化
(2)创建子类对象,并调用父类和子类的方法
public class AnimalTest {public static void main(String[] args) {Cat cat = new Cat();cat.show();cat.eat();cat.action();}}
四、利用多态实现抽象类实例化
上有政策,下有对策,当我们需要实例化抽象类时,可以通过多态去实现
public class AnimalTest {public static void main(String[] args) {//向上转型Animal animal = new Cat();animal.show();animal.eat();//向下转型if(animal instanceof Cat){Cat cat = (Cat)animal;cat.action();}}}
五、接口
首先我们先了解一下什么是接口:大家先看一下自己的电脑上的USB接口,我们能插U盘、鼠标、键盘.......,虽然插的东西不一样,但插上去都能使用,因为电脑上的接口符合USB的标准;
大家再看一下家里的插座,都是一个品牌的吗?我家有公牛的、德力西的....虽然生产厂家不一样,但都能使用,都能通电,因为他们都符合插座的标准。
1、接口定义
(1)接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用;
(2)Java中的接口更多的体现在对行为的抽象;
(3)如果抽象类中所有的方法都是抽象方法,就可以使用接口来表示;
(4)接口可以看做是一个特殊的抽象类,但是接口采用与抽象类完全不同的语法来表示,两者的设计理念也不同。
2、语法格式
英文单词 :interface 接口、接口程序
public interface 接口名{
//常量
//抽象方法
}
3、接口的特点
(1)接口用关键字interface修饰;
(2)接口不能实例化(创建对象);
(3)接口是隐士抽象,变量和方法都可以不用abstract,默认添加abstract(默认接口成员是抽象的);
(4)接口的方法是公有的,必须使用public修饰,用其他修饰符修饰会报错,不写修饰符,会默认修饰符是public;
(5)定义变量必须是常量,修饰符必须用public,用其他修饰符会报错,不写修饰符默认是public;变量默认是静态常量,static和final可写可不写;
(6)接口与接口之间可以继承;
(7)接口是多继承,一个接口可以有多个父类。
(1)创建一个接口Animal,在里面定义变量和方法
public interface Animal {//定义变量默认是:public static final 数据类型 变量名;public static final int A = 1;static final int B = 2;int C = 3;
//这三种定义格式都行,系统都会默认格式为:public static final 数据类型 变量名;//定义方法//系统会默认方法格式为:public abstract 返回值 方法名(参数列表);public abstract void eat();public void action();
}
(2)接口与接口之间的继承(extends)
接口是多继承,一个接口可以继承多个父类
再创建个猫科动物接口:Catamount
public interface Catamount {public abstract void sleep();}
创建个猫接口:Cat,同时继承Aniaml接口和Catamount接口
//接口继承接口,用extends
public interface Cat extends Animal,Catamount{}
六、类实现接口
1、语法格式:
(1)当类实现接口时,必须实现接口中所有的成员,否则类要声明为abstract类;
(2)一个类可以实现多个接口;
(3)类使用implements关键字实现接口。
权限修饰符 class 类名 implements 接口1,接口2,......,接口n{ }
2、代码演示
首先我们有三个接口
public interface Animal {//定义变量默认是:public static final 数据类型 变量名;public static final int A = 1;static final int B = 2;int C = 3;
//这三种定义格式都行,系统都会默认格式为:public static final 数据类型 变量名;//定义方法//系统会默认方法格式为:public abstract 返回值 方法名(参数列表);public abstract void eat();public void action();
}
public interface Catamount {public abstract void sleep();}
public interface Cat extends Animal,Catamount{}
(1)我们先用Dog类实现Animal接口
没全部实现接口里的方法,就会报错!!!
public class Dog implements Animal{@Overridepublic void eat() {System.out.println("狗吃肉");}@Overridepublic void action() {System.out.println("做俯卧撑");}}
测试类及运行结果
public class DogTest {public static void main(String[] args) {//创建Dog类对象并调用方法Dog dog = new Dog();dog.eat();dog.action();dog.fight();}}
(2)创建Tiger类,同时实现Animal和Catamount两个接口
public class Tiger implements Animal,Catamount{@Overridepublic void eat() {System.out.println("吃水果");}@Overridepublic void action() {System.out.println("纹身");}@Overridepublic void sleep() {System.out.println("一天睡八小时");}//Tiger类特有方法public void dream(){System.out.println("烫头");}}
测试类及运行结果
public class TigerTest {public static void main(String[] args) {//创建Tiger类对象Tiger tiger = new Tiger();tiger.eat();tiger.action();tiger.sleep();tiger.dream();}}
(3)创建Kitten类实现子接口Cat
实现类实现的接口如果有父类,要把所有父类中的方法都实现
public class Kitten implements Cat{@Overridepublic void eat() {System.out.println("小猫吃小鱼干");}@Overridepublic void action() {System.out.println("玩毛线");}@Overridepublic void sleep() {System.out.println("一天睡16小时");}}
测试类及运行结果
public class KittenTest {public static void main(String[] args) {//创建Kitten对象Kitten kitten = new Kitten();kitten.eat();kitten.action();kitten.sleep();}}
七、利用多态实例化接口
Animal接口
public interface Animal {public abstract void eat();public void action();
}
实现类Dog类
public class Dog implements Animal{@Overridepublic void eat() {System.out.println("狗吃肉");}@Overridepublic void action() {System.out.println("做俯卧撑");}//Dog类特有方法public void fight(){System.out.println("打群架");}}
测试类及运行结果
public class Test {public static void main(String[] args) {//多态 父类引用指向子类对象Animal animal = new Dog();animal.eat();animal.action();//向下转型if(animal instanceof Dog){Dog dog = (Dog)animal;dog.fight();}}}
八、接口与抽象类
1、接口与抽象类的相似之处
(1)不能实例化;
(2)包含未实现的方法声明;
(3)派生类必须实现未实现的方法,抽象类时抽象方法,接口则是所有成员(不仅包括方法,还有其他成员)。
2、接口与抽象类的区别
(1)一个类能实现多个接口,但一个类只能从一个抽象类(或其他类型的类)继承,从抽象类派生的子类,仍然能实现接口,从而得出接口是用来解决多重继承问题的;
(2)抽象类中可以存在非抽象的方法,可接口不能,且接口中的方法只是一个声明,必须用public修饰,没有具体实现方法;
(3)抽象方法中的成员变量可以用不同的修饰符来修饰,接口中的成员变量默认是静态常量(static final);
(4)抽象类是对象的抽象,然而接口是一种行为规范。
越往后学,大家就会慢慢觉得抽象类没什么用,干嘛不直接定义接口呢。它既然存在就一定有它的用法。大家只要记着,抽象方法是单继承,接口是实现多继承的区别就行了。今天的内容有点多,大家学习的时候可以把两个只是点分开学,搞明白它俩的区别,学起来就简单多了。好了,我是一米八、有腹肌、低于半小时你报警的Loveletter,觉得内容不错的小伙伴可以点点关注,我们下篇博文见,再见!
25、Java面向对象——抽象类和抽象方法、接口相关推荐
- Java面向对象编程篇3——接口与抽象类
Java面向对象编程篇3--接口与抽象类 1.接口(interface) 接口中可以含有变量和方法.但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是pub ...
- Java基础学习第十二讲:Java面向对象---抽象类和接口
Java面向对象-抽象类和接口 一.抽象类 抽象的定义: 我们在日常生活中,经常通过总结一些事物的共性来对事物进行分类,这种共性可能是一些相同的属性,也可能是一些相同的动作.通过总结,我们能够清晰的划 ...
- Java面向对象-抽象类
Java面向对象-抽象类 定义:在java中,含有抽象方法的类称为抽象类,同样不能生成对象: 注意点: 1,包含一个抽象方法的类是抽象类: 2,抽象类和抽象方法都要用abstract关键字修饰: 3, ...
- java面向对象抽象类和接口
抽象方法和抽象类 (1)一个抽象类中可以不定义抽象方法,但是只要类中有一个抽象方法,则该类一定是抽象类 (2)抽象类不能被实例化,即不能被new创建一个实例对象. (3)如果一个子类继承一个抽象类,则 ...
- java面向对象-抽象类和接口
抽象类(abstract没有足够的信息来描述) 被abstract修饰的类就是抽象类,修饰的方法就是抽象方法. 抽象类中可以没有抽象方法,但有抽象方法的类必须要声明为抽象类. 抽象类不能使用new来创 ...
- java中抽象类与抽象方法的使用问题
从面向对象设计的角度来说,抽象类与抽象方法,接口都是必不可少的内容,正是这些概念以及实际运用,够成了java面向对象的核心与强大,抽象类,方法是和多态密不可分的设计范式.... 何为多态?简单的说就是 ...
- (十)Core Java 面向对象(封装,继承,多态,接口) -02 (96)
目录 : 24 ). 面向对象(聚集关系) 25 ). 面向对象(子父类中变量的特点) 26 ). 面向对象(子父类中函数的特点-覆盖) 27 ). 面向对象(子父类中构造函数的特点 ...
- 面向对象——抽象类与抽象方法
如果一个类不与具体的食物相联系,而只表达一种抽象的概念,仅是作为其派生类的一个基类,这样的类就是派生类,在抽象类中,声明抽象类中声明抽象方法是,如果加上abstract关键字则为抽象方法.abstra ...
- Java 面向对象 抽象类与接口
在类的继承中,如果一个个新的子类被定义,子类变得越来越具体,父类变得更加一般和通用,类的设计应该保证父子类能够共享特征,有时将父类设计得非常抽象,使得父类没有具体的实现,这样的类叫做抽象类:一般当我们 ...
最新文章
- liunx上mysql源码安装mysql,搞定linux上MySQL编程(一):linux上源码安装MySQL
- OpenResty中遇到Can't locate Time/HiRes.pm in @INC问题的解决方法
- iOS点击空白收回键盘
- 【TAMU】最新《时间序列分析》课程笔记
- mysql 分时统计_mysql中数据统计的技巧备忘录
- 深入理解Java虚拟机——读书笔记01
- 打勾显示输入的密码 --EditText与setTransformationMethod
- js笔记(五)文档对象模型DOM
- OpenStack组件——Keystone身份认证
- xd使用技巧_魔兽世界怀旧服老玩家才会的治疗技巧,这四个技能需要看时机选择...
- 【Flink】Rowtime timestamp is null. Please make sure that a proper TimestampAssigner is defined and th
- 北京大学生物信息学课程(5)
- Ansys-自适应网格划分-受压薄板学习收获
- 【Python】爬取贝壳网深圳二手房数据
- 李开复:如何设计你的年度计划
- 聊斋2聂小倩java华语版,[转载]《聊斋志异》2.聂小倩(二)蒲松龄 著 宋德利 译...
- Debug Hacks中文版——深入调试的技术和工具
- Ecshop 表结构 字段说明
- GCC编译器和CC编译器的区别
- Word2016如何去掉首页页码并从任意也开始页码