Java笔记(08):面向对象--抽象类

1、抽象类概述:

 1 /*
 2     抽象类的概述:
 3         动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的。
 4         我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须是抽象类。
 5         
 6     抽象类的特点:
 7         A:抽象类和抽象方法必须用abstract关键字修饰
 8         B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
 9         C:抽象类不能实例化
10             因为它不是具体的。
11             抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢?
12             用于子类访问父类数据的初始化
13         D:抽象的子类
14             a:如果不想重写抽象方法,该子类是一个抽象类。
15             b:重写所有的抽象方法,这个时候子类是一个具体的类。
16             
17         抽象类的实例化其实是靠具体的子类实现的。是多态的方式。
18             Animal a = new Cat();
19 */
20 
21 //abstract class Animal //抽象类的声明格式
22 abstract class Animal {
23     //抽象方法
24     //public abstract void eat(){} //空方法体,这个会报错。抽象方法不能有主体
25     public abstract void eat();
26     
27     public Animal(){}
28 }
29 
30 //子类是抽象类
31 abstract class Dog extends Animal {}
32 
33 //子类是具体类,重写抽象方法
34 class Cat extends Animal {
35     public void eat() {
36         System.out.println("猫吃鱼");
37     }
38 }
39 
40 class AbstractDemo {
41     public static void main(String[] args) {
42         //创建对象
43         //Animal是抽象的; 无法实例化
44         //Animal a = new Animal();
45         //通过多态的方式
46         Animal a = new Cat();
47         a.eat();
48     }
49 }

2、抽象类的成员特点:

 1 /*
 2     抽象类的成员特点:
 3         成员变量:既可以是变量,也可以是常量。
 4         构造方法:有。
 5                     用于子类访问父类数据的初始化。
 6         成员方法:既可以是抽象的,也可以是非抽象的。
 7         
 8     抽象类的成员方法特性:
 9         A:抽象方法 强制要求子类做的事情。
10         B:非抽象方法 子类继承的事情,提高代码复用性。
11 */
12 abstract class Animal {
13     public int num = 10;
14     public final int num2 = 20;
15 
16     public Animal() {}
17     
18     public Animal(String name,int age){}
19     
20     public abstract void show();
21     
22     public void method() {
23         System.out.println("method");
24     }
25 }
26 
27 class Dog extends Animal {
28     public void show() {
29         System.out.println("show Dog");
30     }
31 }
32 
33 class AbstractDemo2 {
34     public static void main(String[] args) {
35         //创建对象
36         Animal a = new Dog();
37         a.num = 100;
38         System.out.println(a.num);
39         //a.num2 = 200;
40         System.out.println(a.num2);
41         System.out.println("--------------");
42         a.show();
43         a.method();
44     }
45 }

案例:猫狗

  1 /*
  2     猫狗案例
  3         具体事物:猫,狗
  4         共性:姓名,年龄,吃饭
  5 
  6     分析:从具体到抽象
  7         猫:
  8             成员变量:姓名,年龄
  9             构造方法:无参,带参
 10             成员方法:吃饭(猫吃鱼)
 11             
 12         狗:
 13             成员变量:姓名,年龄
 14             构造方法:无参,带参
 15             成员方法:吃饭(狗吃肉)
 16             
 17         因为有共性的内容,所以就提取了一个父类。动物。
 18         但是又由于吃饭的内容不一样,所以吃饭的方法是抽象的,
 19         而方法是抽象的类,类就必须定义为抽象类。
 20         
 21         抽象动物类:
 22             成员变量:姓名,年龄
 23             构造方法:无参,带参
 24             成员方法:吃饭();
 25     
 26     实现:从抽象到具体
 27         动物类:
 28             成员变量:姓名,年龄
 29             构造方法:无参,带参
 30             成员方法:吃饭();
 31             
 32         狗类:
 33             继承自动物类
 34             重写吃饭();
 35             
 36         猫类:
 37             继承自动物类
 38             重写吃饭();
 39 */
 40 //定义抽象的动物类
 41 abstract class Animal {
 42     //姓名
 43     private String name;
 44     //年龄
 45     private int age;
 46     
 47     public Animal() {}
 48     
 49     public Animal(String name,int age) {
 50         this.name = name;
 51         this.age = age;
 52     }
 53     
 54     public String getName() {
 55         return name;
 56     }
 57     
 58     public void setName(String name) {
 59         this.name = name;
 60     }
 61     
 62     public int getAge() {
 63         return age;
 64     }
 65     
 66     public void setAge(int age) {
 67         this.age = age;
 68     }
 69     
 70     //定义一个抽象方法
 71     public abstract void eat();
 72 }
 73 
 74 //定义具体的狗类
 75 class Dog extends Animal {
 76     public Dog() {}
 77     
 78     public Dog(String name,int age) {
 79         super(name,age);
 80     }
 81     
 82     public void eat() {
 83         System.out.println("狗吃肉");
 84     }
 85 }
 86 
 87 //定义具体的猫类
 88 class Cat extends Animal {
 89     public Cat() {}
 90     
 91     public Cat(String name,int age) {
 92         super(name,age);
 93     }
 94     
 95     public void eat() {
 96         System.out.println("猫吃鱼");
 97     }
 98 }
 99 
100 //测试类
101 class AbstractTest {
102     public static void main(String[] args) {
103         //测试狗类
104         //具体类用法
105         //方式1:
106         Dog d = new Dog();
107         d.setName("旺财");
108         d.setAge(3);
109         System.out.println(d.getName()+"---"+d.getAge());
110         d.eat();
111         //方式2:
112         Dog d2 = new Dog("旺财",3);
113         System.out.println(d2.getName()+"---"+d2.getAge());
114         d2.eat();
115         System.out.println("---------------------------");
116         
117         Animal a = new Dog();
118         a.setName("旺财");
119         a.setAge(3);
120         System.out.println(a.getName()+"---"+a.getAge());
121         a.eat();
122         
123         Animal a2 = new Dog("旺财",3);
124         System.out.println(a2.getName()+"---"+a2.getAge());
125         a2.eat();
126         
127         //练习:测试猫类
128     }
129 }

3、abstrace不能和哪些关键字共存:

 1 /*
 2 一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
 3     A:可以。
 4     B:不让创建对象。
 5 
 6 abstract不能和哪些关键字共存?
 7     private    冲突
 8     final    冲突    
 9     static    无意义
10 */
11 abstract class Fu {
12     //public abstract void show();
13     //非法的修饰符组合: abstract和private
14     //private abstract void show();
15     
16     //非法的修饰符组合
17     //final abstract void show();    
18     
19     //非法的修饰符组合
20     static abstract void show();
21     
22     public static void method() {
23         System.out.println("method");
24     }
25 }
26 
27 class Zi extends Fu {
28     public void show() {}
29 }
30 
31 class AbstractDemo3 {
32     public static void main(String[] args) {
33         Fu.method();
34     }
35 }

 

转载于:https://www.cnblogs.com/lz2lhy/p/6883573.html

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

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

相关文章

mac删除android sd卡,如何从mac完全删除android及其所有文件?

前一段时间我试图让科尔多瓦工作,但android模拟器永远不会启动。它只是挂着一个黑色的屏幕。如何从mac完全删除android及其所有文件?我原来是用brew install android-sdk安装的。然后我读了一个糟糕的地方。所以我已经删除它并安装了Android Studio。无论…

201521123023《Java程序设计》第13周学习总结

1. 本周学习总结 (1)网络中为了进行数据交换(通信)而建立的规则、标准或约定(语义语法规则)称之为协议(常用http/ftp) (2)大致熟悉了TCP协议,但是UDP怎么辣么蓝&#xff…

Android中怎获取json,Android应用中如何解析获取的json数据

Android应用中如何解析获取的json数据发布时间:2020-11-24 17:10:08来源:亿速云阅读:107作者:Leah这篇文章将为大家详细讲解有关Android应用中如何解析获取的json数据,文章内容质量较高,因此小编分享给大家…

Hibernate4之session核心方法

在学习session的核心方法之前,我们先了解下hibernate中几种对象的状态: 暂时状态:这样的状态就好像咱们公司请的暂时员工一样,他在公司里没有相关的资料和id。 特点:在使用代理主键的情况下, OID 通常为 null 不…

Android 同步锁死锁,Android多线程研究(3)——线程同步和互斥及死锁

为什么会有线程同步的概念呢?为什么要同步?什么是线程同步?先看一段代码:package com.maso.test;public class ThreadTest2 implements Runnable{private TestObj testObj new TestObj();public static void main(String[] args)…

QML与C++交互:登陆界面设计

QML与C交互:登陆界面设计 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:Qt5.2.1 说明: QML设计前台界面,C后台负责逻辑 效果图: 源码: 前台qml文件 login.qml /******************************************************…

html怎么在字体中加波浪线,CSS3实现文字波浪线效果

前言css的设计之巧妙,实现之精妙,细细寻味,其妙非凡,妙不可言。这波浪线,取巧的运用了linear-gradient属性,合角度、颜色、位置于一体,配合background-size,background-repeat&#…

NET Core 指令启动

ASP.NET Core 是新一代的 ASP.NET,早期称为 ASP.NET vNext,并且在推出初期命名为ASP.NET 5,但随着 .NET Core 的成熟,以及 ASP.NET 5的命名会使得外界将它视为 ASP.NET 的升级版,但它其实是新一代从头开始打造的 ASP.N…

html文本显示状态代码中,HTML文本显示状态代码中,表示?

文本如何大小判别偏心受压剪力墙的。能源能量然资提供的自是指源,显示如(,显示能、能、能、能、、热等的械能是机生物原子光能化学总称,不可能源然界的一可再生能于自源可源和再生分为存在次能。状态中表并发儿麻体温生的婴幼易发间低醉期症(…

1807. [NOIP2014]寻找道路P2296 寻找道路

题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通。 2 .在满足…

html页面 wordpress,WordPress纯代码实现前端页面HTML完美压缩

前言:压缩HTML页面的好处就是略微提升页面加载速度,并给那些爱扒皮的缺德玩意制造些许麻烦。好了将如下代码添加在functions.php中即可://压缩WordPress前端html代码function wp_compress_html(){function wp_compress_html_main ($buffer){$…

js中的作用域

关于变量和参数问题: 函数外面定义的变量是全局变量,函数内可以直接使用。 在函数内部没有使用var定义的变量则为全局变量,在函数内使用var关键字定义的变量是局部变量,即出了函数外边无法获取。 js函数定义的参数没有默认值&…

html HTML1300 进行了导航,jquery根据文章H标签自动生成导航目录

jquery根据文章H标签自动生成导航目录2017-11-19 20:57在一些旅游网站,比如说途牛、携程这些,当你看某条线路的详情页时,右边会有相应的第一天、第二天等的目录。这么大的网站,不可能后台添加行程的时候,每一天都要自动…

asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User

前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cookie中,因为有次我在mac系统中的sa…

html的排版标题的是,HTML 5结构排版布局

进行总体布局时候,具体可以用的方法。1.大纲:文档中各内容区块的结构编排。内容区块可以使用标题元素来展示各级内容区块的标题。关于内容区块的编排可以分为“显示编排”和“隐式编排”。显示编排:明确使用section等元素创建文档结构&#x…

[LeetCode]Distinct Subsequences,解题报告

题目 Given a string S and a string T, count the number of distinct subsequences of T in S.A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative po…

2021年河南高考成绩排名查询一分一段表,2018河南高考一分一段统计表,查排名必备!...

原标题:2018河南高考一分一段统计表,查排名必备!:点击这里信息省招办公布了2018年普通高招分数段统计表,对每个分数段有多少考生进行了详细统计。你考了多少分?处在哪个位置?快来看看&#xff0…

实用的css样式

当字数超过一行时,可以用...代替 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 这三个样式同时使用才有效,也可以去掉white-space样式,分两行 转载于:https://www.cnblogs.com/maggie-php/p/6906462.html

js滚轮换切屏

js滚轮换切屏 因为全项目不是自己写的,仅仅是帮别人写js滚轮代码,并且别人项目也还未上线。所以仅仅贴出自己写的那段部分代码, 效果:鼠标滚轮滚动时。网頁屏幕一屏一屏的上下切换 (下面代码在本地电脑的IE,chrome与FireFox这三个…

(2021|CoRR,AugCLIP,优化)FuseDream:通过改进的 CLIP+GAN 空间优化实现免训练文本到图像生成

FuseDream: Training-Free Text-to-Image Generation with Improved CLIPGAN Space Optimization 公众:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料) 目录 0. 摘要 1. 简介 2. CLIPGAN 文本到图…