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学习打卡第四天——[抽象类,多态,接口,形参的简介和使用]相关推荐

  1. Java学习day_012(OOP):抽象类、接口和内部类(上)

    一.static:静态的 成员变量包括:实例变量(无static修饰,属于对象,储存在堆中,有几个对象就有几份,通过对象点来访问)and 静态变量(有static修饰,属于类,存储在方法区中,只有一份 ...

  2. Java OOP 第四章 抽象类和接口

    Java OOP 抽象类和接口 文章目录 Java OOP 抽象类和接口 一.学习目标 二.抽象类 三.抽象类 (abstract) 四.抽象方法 五.抽象类和抽象方法的应用 六.final用法 七. ...

  3. 爬虫学习打卡第四天——requests实战

    目录 一.获取百度网页并打印 二.获取美女图片并下载到本地 三.获取美女视频并下载到本地 四.百度关键词搜索爬取 五.爬取百度翻译 一.获取百度网页并打印 代码如下: import requests ...

  4. java学习笔记03-封装 继承 抽象类 多态 接口

    封装:在类的属性设置时 使用private将数据隐藏.不允许使用a.xingming来调用数据,可以设置get和set函数来对数据进行查看和修改(在其中添加if的判断语句来控制该参数的修改权限和读取权 ...

  5. 第三次学JAVA再学不好就吃翔(part38)--抽象类与接口的区别

    学习笔记,仅供参考 文章目录 面向对象 接口 类和接口的关系 抽象类与接口的区别 案例学习 面向对象 接口 类和接口的关系 类与类的关系 继承关系,并且只能单继承,不能多继承,但是可以多层继承 类与接 ...

  6. Java复习题1(1.写出抽象类和接口的区别。2.This和Super关键字的区别有哪些?3.常见的类集子类有哪些,各有什么特点?4.什么是多态,多态实现的前提是什么?)

    1.写出抽象类和接口的区别. 答: 抽象类中的方法不全是抽象方法,可以在抽象类中声明并实现其他方法. 接口不允许方法的实现,定义的方法无方法体. 抽象类中的成员变量可以使用不同修饰符修饰,如publi ...

  7. Java基础学习系列--(二)【抽象类,接口、代码块、final、单例、枚举】

    第一章 抽象类 1.1 概述 1.1.1 抽象类引入 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同.那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对 ...

  8. Java学习打卡第八天——[Collection终结之HashMap,Collections的简介和使用]

    今天已经是学习集合的第三天: [1]第一天学习了Collection集合的List,ArrayList和LinkedList的常用方法和基础规则, ArrayList特点总结: 1.ArrayList ...

  9. 黑马程序员java学习打卡----程序流程控制

    学习总内容: 分支结构 1.if 2.switch 3.switch的穿透性 循环结构 1.for循环 2.while循环 3.死循环 4.循环嵌套 跳转关键字 break continue 案列技术 ...

最新文章

  1. android 如何将电话簿SDN数字和其他普通的数字混合在一起?
  2. java怎么用柱形图_java绘制柱形图
  3. Android-实现一个简单的自动翻译插件
  4. 小技巧:with用法 pycharm控制台输出带颜色的文字 打印进度条的
  5. python中面向对象编程简称为_Python基础-面向对象编程
  6. 学习笔记(42):Python实战编程-pyinstaller程序打包
  7. 解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题
  8. 60秒计时器的仿真电路_DS1302的电子万年历,时间、闹钟可调,带温度农历显示,原理图、仿真和代码...
  9. 纯粹透明背景的QGraphicsView
  10. opencv编译之修改python绑定so名字
  11. FZU 1692 Key problem
  12. VC6编译64位程序
  13. 计算机网络笔记整理(第七版)谢希仁
  14. 微信小游戏制作坦克大战(一)微信小游戏制作工具介绍
  15. 后盾网Laravel 5.2开发实战视频
  16. 微信小程序文件下载并保存
  17. Hadoop Failover
  18. java BigDecimal
  19. Ubuntu查看USB串口号【简单、好记、好看】
  20. 153870-20-3,S-acetyl-PEG3-alcohol羟基可以反应进一步衍生化合物

热门文章

  1. 容器编排——Kubeadm在线或离线搭建kubernetes高可用集群
  2. c:计算零件数有一堆零件(100--1000之间),如果分成4个零件一组的若干组,则多2个零件;如果分成7个零件一组的若干组,则多3个零件;如果分成9个零件一组的若干组,则多5个零件。编程计算满足上
  3. ajax球队队徽,【转】科普:各豪门队徽的意义
  4. 用简单的C语言程序验证哥德巴赫猜想(是验证不是证明啦)
  5. 《综述》群体机器人:群体工程角度综述
  6. python 判断时间是否为周末,是的话跳到下周一
  7. overflow属性html5,什么是css中overflow属性
  8. Grand Theft Auto V (侠盗列车手5)图形研究
  9. ajax请求模拟json数据,ajax+json进行数据传输请求(ssm框架)
  10. 2019最佳弹窗/弹出框设计20例【附教程】