Java学习打卡第四天——[抽象类,多态,接口,形参的简介和使用]
Javaee之【抽象类】
Javaee之【多态】
Javaee之【接口】
Javaee之【抽象类,多态,接口,继承】
Javaee之【形参】
抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
在抽象类中子类必须重写父类的抽象方法;
示例:
动物类:
public abstract class Animal {private String name;private String age;public Animal() {}public Animal(String name, String age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public abstract void eat();public void show(){System.out.println(name+","+age);}
}
猫类:
public class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫喜欢吃鱼");}public Cat() {}public Cat(String name, String age) {super(name, age);}}
狗类:
public class Dog extends Animal{public Dog() {}public Dog(String name, String age) {super(name, age);}@Overridepublic void eat() {System.out.println("狗喜欢啃骨头");}
}
测试类:
public class AbstraDemo {public static void main(String[] args) {//多态的使用Animal a1 = new Cat();a1.setName("加菲猫");a1.setAge("1");System.out.println(a1.getName()+","+a1.getAge());a1.eat();a1.show();Animal a2 = new Cat("加菲","1");System.out.println(a2.getName()+","+a2.getAge());a2.eat();a2.show();Animal a3 = new Dog();a3.setName("明明");a3.setAge("2");System.out.println(a3.getName()+","+a3.getAge());a3.eat();a3.show();Animal a4 = new Dog("花花","2");System.out.println(a4.getName()+","+a4.getAge());a4.eat();a4.show();}
}
多态
多态:
多态是同一个行为具有多个不同表现形式或形态的能力。
例如:
一个抽象类:里面有一个吃的行为
在狗的类里面表现的是吃骨头,在猫的类里面表现的是吃鱼的行为;
也可以这样简单理解:
一个抽象类不能实例化对象,必须依靠子类来创建对象
在抽象类中已经使用了多态:
Animal a = new Cat();
Animal a3 = new Dog();
多态就是同一个接口,使用不同的实例而执行不同操作;
多态使用的前提:
1、有继承关系
2、有方法重写
3、父类指向子类对象
动物类:
public class Animal {public int age=8;public void eat(){System.out.println("动物类有的喜欢吃鱼");}
}
猫类:
public class Cat extends Animal{public int age=6;public int weight;@Overridepublic void eat() {System.out.println("猫爱吃鱼");}public void catchmouth(){System.out.println("猫喜欢抓老鼠");}
}
测试类:
public class Duotai02 {public static void main(String[] args) {Animal a1 = new Cat();//多态方法编译看左边,运行看右边(子类的)a1.eat();// 多态中使用的方法父类也要有
// a1.catchmouth();//运行中成员变量使用的是父类的System.out.println(a1.age);//父类也要有变量才可以使用
// System.out.println(a1.weight);}
}
接口
简介:
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过实现接口的方式,从而来实现接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
接口使用示例:
接口:
public interface Jumping {public abstract void jump();
}
动物类:
public abstract class Animal {private String name;private String age;public Animal() {}public Animal(String name, String age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public abstract void eat();
}
猫类:
public class Cat extends Animal implements Jumping{public Cat() {}public Cat(String name, String age) {super(name, age);}@Overridepublic void eat() {System.out.println("猫吃鱼");}@Overridepublic void jump() {System.out.println("猫可以调高了");}
}
测试类:
public class Interfacempl {public static void main(String[] args) {//猫使用无参构造,狗使用带参构造Animal a1 = new Cat();a1.setName("加菲");a1.setAge("2");System.out.println(a1.getName()+","+a1.getAge());a1.eat();Jumping j1 = (Cat) a1;j1.jump();/*Animal a2 = new Dog("花花","1");System.out.println(a2.getName()+","+a2.getAge());a2.eat();Jumping J2 = (Dog) a2;((Dog) a2).jump();*///具体实现的时候使用最多的就是直接使用Cat来创造对象//因为它可以直接使用抽象类和接口里面的方法Cat c = new Cat("加菲猫","2");System.out.println(c.getName()+","+c.getAge());c.eat();c.jump();}
}
抽象类,接口,继承综合案例
题目:
分析:
英语接口
public interface SpeakEnglish {public abstract void speakEnglish();
}
教练类:
public abstract class Coach extends Person{public Coach() {}public Coach(String name, String age) {super(name, age);}public abstract void teach();}
运动员类:
public abstract class Player extends Person{public Player() {}public Player(String name, String age) {super(name, age);}public abstract void study();}
篮球教练类:
public class BasketballTeacher extends Coach{public BasketballTeacher() {}public BasketballTeacher(String name, String age) {super(name, age);}public void eat(){System.out.println("篮球教练在吃饭");}public void teach(){System.out.println("篮球教练教如何运球和投篮");}
}
篮球运动员类:
public class BasketballStudent extends Player{public BasketballStudent() {}public BasketballStudent(String name, String age) {super(name, age);}@Overridepublic void study(){System.out.println("篮球运动员在学习打篮球");}@Overridepublic void eat() {System.out.println("篮球运动员在吃饭");}
}
兵乓球教练类:
public class PingpangTeacher extends Coach implements SpeakEnglish{public PingpangTeacher() {}public PingpangTeacher(String name, String age) {super(name, age);}@Overridepublic void eat() {System.out.println("乒乓球教练在吃饭");}@Overridepublic void teach(){System.out.println("乒乓球教练教如何发球");}@Overridepublic void speakEnglish(){System.out.println("乒乓球教练说英语");}
}
乒乓球运动员类:
public class PingpangStudent extends Player implements SpeakEnglish{public PingpangStudent() {}public PingpangStudent(String name, String age) {super(name, age);}@Overridepublic void eat() {System.out.println("乒乓球运动员在吃饭");}@Overridepublic void study(){System.out.println("学习乒乓球");}@Overridepublic void speakEnglish(){System.out.println("乒乓球运动员会说英语");}
}
测试类:
public class Demo {public static void main(String[] args) {BasketballStudent bs = new BasketballStudent();bs.setName("王明");bs.setAge("21");System.out.println(bs.getName()+","+bs.getAge());bs.eat();bs.study();System.out.println("----------------------");PingpangStudent ps = new PingpangStudent();ps.setName("王浩");ps.setAge("22");System.out.println(ps.getName()+","+ps.getAge());ps.eat();ps.study();ps.speakEnglish();System.out.println("----------------------");BasketballTeacher bt = new BasketballTeacher();bt.setName("姚明");bt.setAge("23");System.out.println(bt.getName()+","+bt.getAge());bt.eat();bt.teach();System.out.println("----------------------");PingpangTeacher pt = new PingpangTeacher("李华","24");System.out.println(pt.getName()+","+pt.getAge());pt.eat();pt.teach();pt.speakEnglish();}
}
形参
这里主要介绍的是类作为形参,类作为返回值的情况; 代码中有注释直接看代码即可 下面直接给出示例: 猫类:
public class Cat {public void eat(){System.out.println("猫吃鱼");}
}
猫操作类:
public class Catoperator {//类作为形参传递的是一个具体的对象public void useCat(Cat c){c.eat();}//Cat作为返回值类型返回的是一个Cat对象public Cat getCat(){Cat c = new Cat();return c;}
}
测试类:
public class CatDemo {public static void main(String[] args) {//创建一个操作类对象Catoperator co = new Catoperator();Cat c = new Cat();co.useCat(c);Cat c2 = co.getCat();c2.eat();}
}
Java学习打卡第四天——[抽象类,多态,接口,形参的简介和使用]相关推荐
- Java学习day_012(OOP):抽象类、接口和内部类(上)
一.static:静态的 成员变量包括:实例变量(无static修饰,属于对象,储存在堆中,有几个对象就有几份,通过对象点来访问)and 静态变量(有static修饰,属于类,存储在方法区中,只有一份 ...
- Java OOP 第四章 抽象类和接口
Java OOP 抽象类和接口 文章目录 Java OOP 抽象类和接口 一.学习目标 二.抽象类 三.抽象类 (abstract) 四.抽象方法 五.抽象类和抽象方法的应用 六.final用法 七. ...
- 爬虫学习打卡第四天——requests实战
目录 一.获取百度网页并打印 二.获取美女图片并下载到本地 三.获取美女视频并下载到本地 四.百度关键词搜索爬取 五.爬取百度翻译 一.获取百度网页并打印 代码如下: import requests ...
- java学习笔记03-封装 继承 抽象类 多态 接口
封装:在类的属性设置时 使用private将数据隐藏.不允许使用a.xingming来调用数据,可以设置get和set函数来对数据进行查看和修改(在其中添加if的判断语句来控制该参数的修改权限和读取权 ...
- 第三次学JAVA再学不好就吃翔(part38)--抽象类与接口的区别
学习笔记,仅供参考 文章目录 面向对象 接口 类和接口的关系 抽象类与接口的区别 案例学习 面向对象 接口 类和接口的关系 类与类的关系 继承关系,并且只能单继承,不能多继承,但是可以多层继承 类与接 ...
- Java复习题1(1.写出抽象类和接口的区别。2.This和Super关键字的区别有哪些?3.常见的类集子类有哪些,各有什么特点?4.什么是多态,多态实现的前提是什么?)
1.写出抽象类和接口的区别. 答: 抽象类中的方法不全是抽象方法,可以在抽象类中声明并实现其他方法. 接口不允许方法的实现,定义的方法无方法体. 抽象类中的成员变量可以使用不同修饰符修饰,如publi ...
- Java基础学习系列--(二)【抽象类,接口、代码块、final、单例、枚举】
第一章 抽象类 1.1 概述 1.1.1 抽象类引入 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同.那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对 ...
- Java学习打卡第八天——[Collection终结之HashMap,Collections的简介和使用]
今天已经是学习集合的第三天: [1]第一天学习了Collection集合的List,ArrayList和LinkedList的常用方法和基础规则, ArrayList特点总结: 1.ArrayList ...
- 黑马程序员java学习打卡----程序流程控制
学习总内容: 分支结构 1.if 2.switch 3.switch的穿透性 循环结构 1.for循环 2.while循环 3.死循环 4.循环嵌套 跳转关键字 break continue 案列技术 ...
最新文章
- android 如何将电话簿SDN数字和其他普通的数字混合在一起?
- java怎么用柱形图_java绘制柱形图
- Android-实现一个简单的自动翻译插件
- 小技巧:with用法 pycharm控制台输出带颜色的文字 打印进度条的
- python中面向对象编程简称为_Python基础-面向对象编程
- 学习笔记(42):Python实战编程-pyinstaller程序打包
- 解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题
- 60秒计时器的仿真电路_DS1302的电子万年历,时间、闹钟可调,带温度农历显示,原理图、仿真和代码...
- 纯粹透明背景的QGraphicsView
- opencv编译之修改python绑定so名字
- FZU 1692 Key problem
- VC6编译64位程序
- 计算机网络笔记整理(第七版)谢希仁
- 微信小游戏制作坦克大战(一)微信小游戏制作工具介绍
- 后盾网Laravel 5.2开发实战视频
- 微信小程序文件下载并保存
- Hadoop Failover
- java BigDecimal
- Ubuntu查看USB串口号【简单、好记、好看】
- 153870-20-3,S-acetyl-PEG3-alcohol羟基可以反应进一步衍生化合物
热门文章
- 容器编排——Kubeadm在线或离线搭建kubernetes高可用集群
- c:计算零件数有一堆零件(100--1000之间),如果分成4个零件一组的若干组,则多2个零件;如果分成7个零件一组的若干组,则多3个零件;如果分成9个零件一组的若干组,则多5个零件。编程计算满足上
- ajax球队队徽,【转】科普:各豪门队徽的意义
- 用简单的C语言程序验证哥德巴赫猜想(是验证不是证明啦)
- 《综述》群体机器人:群体工程角度综述
- python 判断时间是否为周末,是的话跳到下周一
- overflow属性html5,什么是css中overflow属性
- Grand Theft Auto V (侠盗列车手5)图形研究
- ajax请求模拟json数据,ajax+json进行数据传输请求(ssm框架)
- 2019最佳弹窗/弹出框设计20例【附教程】