java学习(七)java中抽象类及 接口

抽象类的特点:

A:抽象类和抽象方法必须用abstract关键字修饰。

B:抽象类中不一定有抽象方法,但是抽象方法的类必须定义为抽象类

c: 抽象类不能被实例化,因为它不是具体的。

     抽象类有构造方法,但不能被实例化?构造方法的作用是什么?

     用于子类访问父类数据的初始化。

D:抽象的子类。

        如果不想重写抽象类的方法,该子类是个抽象类。重写所有的抽象方法,这个时候子类是一个具体的类

抽象类Demo:

//abstract class Animal //抽象类的声明格式
abstract class Animal {//抽象方法//public abstract void eat(){} //空方法体,这个会报错。抽象方法不能有主体public abstract void eat();public Animal(){}
}//子类是抽象类
abstract class Dog extends Animal {}//子类是具体类,重写抽象方法
class Cat extends Animal {public void eat() {System.out.println("猫吃鱼");}
}class AbstractDemo {public static void main(String[] args) {//创建对象//Animal是抽象的; 无法实例化//Animal a = new Animal();//通过多态的方式Animal a = new Cat();a.eat();}
}

 抽象实例:

/*抽象类的成员特点:成员变量:既可以是变量,也可以是常量。构造方法:有。用于子类访问父类数据的初始化。成员方法:既可以是抽象的,也可以是非抽象的。抽象类的成员方法特性:A:抽象方法 强制要求子类做的事情。B:非抽象方法 子类继承的事情,提高代码复用性。
*/
abstract class Animal {public int num = 10;public final int num2 = 20;public Animal() {}public Animal(String name,int age){}public abstract void show();public void method() {System.out.println("method");}
}class Dog extends Animal {public void show() {System.out.println("show Dog");}
}class AbstractDemo2 {public static void main(String[] args) {//创建对象Animal a = new Dog();a.num = 100;System.out.println(a.num);//a.num2 = 200;
        System.out.println(a.num2);System.out.println("--------------");a.show();a.method();}
}
/*猫狗案例具体事物:猫,狗共性:姓名,年龄,吃饭分析:从具体到抽象猫:成员变量:姓名,年龄构造方法:无参,带参成员方法:吃饭(猫吃鱼)狗:成员变量:姓名,年龄构造方法:无参,带参成员方法:吃饭(狗吃肉)因为有共性的内容,所以就提取了一个父类。动物。但是又由于吃饭的内容不一样,所以吃饭的方法是抽象的,而方法是抽象的类,类就必须定义为抽象类。抽象动物类:成员变量:姓名,年龄构造方法:无参,带参成员方法:吃饭();实现:从抽象到具体动物类:成员变量:姓名,年龄构造方法:无参,带参成员方法:吃饭();狗类:继承自动物类重写吃饭();猫类:继承自动物类重写吃饭();
*/
//定义抽象的动物类
abstract class Animal {//姓名private String name;//年龄private int age;public Animal() {}public Animal(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//定义一个抽象方法public abstract void eat();
}//定义具体的狗类
class Dog extends Animal {public Dog() {}public Dog(String name,int age) {super(name,age);}public void eat() {System.out.println("狗吃肉");}
}//定义具体的猫类
class Cat extends Animal {public Cat() {}public Cat(String name,int age) {super(name,age);}public void eat() {System.out.println("猫吃鱼");}
}//测试类
class AbstractTest {public static void main(String[] args) {//测试狗类//具体类用法//方式1:Dog d = new Dog();d.setName("旺财");d.setAge(3);System.out.println(d.getName()+"---"+d.getAge());d.eat();//方式2:Dog d2 = new Dog("旺财",3);System.out.println(d2.getName()+"---"+d2.getAge());d2.eat();System.out.println("---------------------------");Animal a = new Dog();a.setName("旺财");a.setAge(3);System.out.println(a.getName()+"---"+a.getAge());a.eat();Animal a2 = new Dog("旺财",3);System.out.println(a2.getName()+"---"+a2.getAge());a2.eat();}
}

抽象类不能和那些关键字共存

/*
一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?A:可以。B:不让创建对象。abstract不能和哪些关键字共存?private    冲突final    冲突    static    无意义
*/
abstract class Fu {//public abstract void show();//非法的修饰符组合: abstract和private//private abstract void show();//非法的修饰符组合//final abstract void show();    //非法的修饰符组合static abstract void show();public static void method() {System.out.println("method");}
}class Zi extends Fu {public void show() {}
}class AbstractDemo3 {public static void main(String[] args) {Fu.method();}
}

接口的特点:

A:接口用关键字interface表示,interface 接口名{}

B:类实现接口用implements 表示

      class  类名  implements 接口名{}

C:接口不能实例化

     接口实例化必须按照多态的方式来实现实例化的

D:接口的子类:

      可以是抽象类,但意义不大

      可以是具体类,要重写接口中所有抽象方法

/*接口的特点:A:接口用关键字interface表示    interface 接口名 {}B:类实现接口用implements表示class 类名 implements 接口名 {}C:接口不能实例化那么,接口如何实例化呢?按照多态的方式来实例化。D:接口的子类a:可以是抽象类。但是意义不大。b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)由此可见:A:具体类多态(几乎没有)B:抽象类多态(常用)C:接口多态(最常用)
*/
//定义动物培训接口
interface AnimalTrain {public abstract void jump();
}//抽象类实现接口
abstract class Dog implements AnimalTrain {
}//具体类实现接口
class Cat implements AnimalTrain {public void jump() {System.out.println("猫可以跳高了");}
}class InterfaceDemo {public static void main(String[] args) {//AnimalTrain是抽象的; 无法实例化//AnimalTrain at = new AnimalTrain();//at.jump();
        AnimalTrain at = new Cat();at.jump();}
}

接口成员特点:

   成员变量:

        只能是常量,默认饰符  public static final

   构造方法:

       没有,因为接口主要是扩展功能的,而没有具体存在

   成员方法:

       只能是抽象方法,默认修饰符  public abstract

/*接口成员特点成员变量;只能是常量,并且是静态的。默认修饰符:public static final建议:自己手动给出。构造方法:接口没有构造方法。成员方法:只能是抽象方法。默认修饰符:public abstract建议:自己手动给出。所有的类都默认继承自一个类:Object。类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。
*/
interface Inter {public int num = 10;public final int num2 = 20;public static final int num3 = 30;//错误: 需要<标识符>//public Inter() {}//接口方法不能带有主体//public void show() {}//abstract void show(); //默认publicpublic void show(); //默认abstract
}//接口名+Impl这种格式是接口的实现类格式
/*
class InterImpl implements Inter {public InterImpl() {super();}
}
*/class InterImpl extends Object implements Inter {public InterImpl() {super();}public void show() {}
}//测试类
class InterfaceDemo2 {public static void main(String[] args) {//创建对象Inter i = new InterImpl();System.out.println(i.num);System.out.println(i.num2);//i.num = 100;//i.num2 = 200;//System.out.println(i.num); //无法为最终变量num分配值//System.out.println(i.num2);//无法为最终变量num2分配值
        System.out.println(Inter.num);System.out.println(Inter.num2);System.out.println("--------------");}
}

 

转载于:https://www.cnblogs.com/chenchenphp/p/7020512.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机的小窗口怎么弄_荣耀9X如何设置桌面小工具?划重点,这个要考

为了方便手机操作&#xff0c;一些小伙伴会在手机桌面上添加天气、一键锁屏、日历等窗口小工具&#xff0c;那么问题来了&#xff01;荣耀9X这款新手机是如何添加窗口小工具呢&#xff1f;官维君今天就来给大家讲解一下方法。标准姿势看这里——第一步&#xff1a;在桌面双指头…

ASP.NET Core 同时支持多种认证方式 | Swagger 支持

前言上次&#xff0c;我们实现了《ASP.NET Core 同时支持多种认证方式》&#xff1a;services.AddAuthentication().AddDemoAuthentication(options > { }).AddJwtBearer(options >{...});我们还希望为 Swagger 也添加多种认证支持。原来为支持 JWT 认证&#xff0c;Swag…

js监听url变化

//监听触发操作 function hashChangeFire(){alert("k") }//url变化监听器 if( (onhashchange in window) && ((typeof document.documentModeundefined) || document.documentMode8)) {// 浏览器支持onhashchange事件window.onhashchange hashChangeFire; …

Redis指南

一、简介 redis 和 memcached 都是高性能的键值缓存数据库服务&#xff0c;其中 memcached 支持多线程&#xff0c;而 redis 支持丰富的数据结构且能内置持久化机制。 redis 数据都是以键值形式存储的&#xff0c;键是字符串类型&#xff0c;值有 7 种类型&#xff08;本质上是…

SpringIOC之AbstractMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

python3怎样交换数字顺序_python中怎么交换列的顺序

DataFrame的列有时我们需要对添加的列或原来的列进行交换顺序。data pd.DataFrame(np.arange(16).reshape(4,4),columnslist(abcd))In [88]: dataOut[88]:a b c d0 0 1 2 31 4 5 6 72 8 9 10 113 12 13 14 15一&#xff1a;获取DataFrame列标签cols list(data)In [94]: colsO…

【实战】手把手教你从 0 到 1 搭建一套 RocketMQ 集群

大家好&#xff0c;我是君哥。今天来分享怎样搭建 RocketMQ 集群。本文搭建集群使用的环境是 2 个云主机&#xff0c;架构如下&#xff1a;在 47.xx.xx.xx 和 39.xx.xx.xx 上分别部署一个 Name Server 和 Broker 主节点&#xff0c;这里不搭建从节点。也就是官网介绍的 2m-nosl…

使用SMART监控Ubuntu

参考&#xff1a;完全用 GNU/Linux 工作 - 29. 檢測硬碟 S.M.A.R.T. 健康狀態 1.安装 sudo apt-get install smartmontools2.查看硬盘的参数&#xff0c;需要获得Root权限 sudo smartctl -i /dev/sdasmartctl 6.5 2016-01-24 r4214 [x86_64-linux-4.4.0-122-generic] (local bu…

Shell中各种判断语法

Shell判断 按照文件类型进行判断 -b 判断文件是否存在&#xff0c;并且是否为快设备文件&#xff08;是块设备文件为真&#xff09; -c 判断文件是否存在&#xff0c;并且是否为字符设备文件&#xff08;是字符设备文件为真&#xff09; -d 判断文件是否存在&#xff0c;并且是…

敏捷制造:并不是你想像的矛盾体

\关键点\敏捷制造使企业能够比传统制造方式更快更有效地取悦客户 \敏捷方法实际上是为制造而不是软件而开发的 \敏捷制造需要从上到下的数字视角和承诺 \敏捷制造需要新的技能&#xff0c;还需要授权、扁平化合作和贯穿整个组织的沟通 \迈向敏捷制造的第一步可以是通过升级传统…

c#队列取值_在队列的开头获取对象– C#中的窥视操作

要在队列的开始处获取对象&#xff0c;代码如下-示例using System;using System.Collections.Generic;public class Demo {public static void Main() {Queue queue new Queue();queue.Enqueue("A");queue.Enqueue("B");queue.Enqueue("C");que…

上海一趟,我陷入了沉思

hi&#xff0c;这里是桑小榆。2022年8月20日&#xff0c;我去了一趟上海&#xff0c;交了很多新朋友&#xff0c;和各行业且具备独立思考的伙伴交流了很多&#xff0c;也吸收了很多的新东西。此篇我将分享我的感悟&#xff0c;并以自己的角度剖析存在的问题。痛苦与症状在此之前…

廖雪峰 练习 把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字...

# -*- coding: utf-8 -*- #输入名字&#xff0c;变成首字母大写&#xff0c;其他字母小写的标准格式 def normalize(name):str1 for i, ch in enumerate(name):if i 0:str1 str1 ch.upper() #str.upper() 方法让字母转大写else:str1 str1 ch.lower() #str.lower()…

Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件

为什么80%的码农都做不了架构师&#xff1f;>>> Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件 http://www.swiper.com.cn/ 转载于:https://my.oschina.net/huqiji/blog/800482

vue实现todo功能(一):搭建vue-webpack环境

前言 我最开始因为项目原因接触的是react&#xff0c;对于我这种美观狂而言&#xff0c;react中难以调解的css让我十分抓狂&#xff0c;说是在写页面&#xff0c;因为不能写自己的样式&#xff0c;像是在拼凑页面&#xff0c;没意思。于是我开始了解vue这种将css html javacrip…

单模光电转换器怎么接_以太网光纤收发器怎么用?

以太网光纤收发器有单模、多模&#xff0c;单纤、双纤&#xff0c;百兆、千兆&#xff0c;电信级和工业级品质&#xff0c;稳定可靠&#xff0c;是网络高清监控优选设备。那么&#xff0c;以太网光纤收发器怎么用呢&#xff1f;接下来就由飞畅科技的小编来为大家详细介绍下以太…

Unity浅析

在分析PRISM项目的时候, 发现里面用到了Unity 这个Component, 主要用于依赖注入的。由于对其不熟悉&#xff0c;索性分析了一下&#xff0c;记载在此&#xff0c;以作备忘。 任何事物的出现&#xff0c;总有它独特的原因&#xff0c;Unity也是如此。 在Unity产生之前&#xff0…

WPF效果第一百九十六篇之彩色马蹄形图

上一篇又是基于ListBox改了改模板实现了点不一样的效果;今天来分享一点这些天一直摸索的好玩的效果;闲话不多扯直接看效果:1、对于各种定义就直接看下面:https://www.wigglepixel.nl/en/blog/what-are-color-spaces-color-profiles-and-gamma-correction2、关于马蹄图我找到了S…

grub4dos中的不容易理解的问题

2019独角兽企业重金招聘Python工程师标准>>> menu.lst中写有菜单&#xff0c;但又发现很多人使用BCD,是否是这样&#xff0c;通过menu.lst中的菜单引导的系统&#xff0c;是不通过BCD文件引导的&#xff0c;还是说它们是必须同时有的&#xff0c;并且要关联呢&#…

卸载wps后桌面上的office文件图标变成了白色

文章目录卸载wps后桌面上的office文件图标变成了白色第一步&#xff1a;第二步卸载wps后桌面上的office文件图标变成了白色 作者&#xff1a;wyf 第一步&#xff1a; **win(图标&#xff09;R&#xff0c;输入regedit&#xff0c;点击确定**第二步 2、找到HKEY_CLASSES_ROOT…