JAVA面向对象-----抽象类
1抽象类
为什么使用抽象类
1:定义Dog类
有颜色属性和叫的方法
2:定义Bird类
有颜色属性和叫的方法
3:定义其父类Animal
1:颜色的属性可以使用默认初始化值。
2:叫的方法在父类中如何定义?1:狗是旺旺
2:鸟是叽叽喳喳
3:可以将父类的方法定义为狗叫让鸟继承父类重写叫的方法1:鸟怎么确定是否要重写父类方法。
2:不重写,编译和运行都没有问题,只是执行鸟叫的方法就会出现狗叫4:父类的方法很难确定。
class Animal {
String color;
void shout(){
//如何定义呢?是旺旺还是叽叽喳喳?
}
}
class Dog extends Animal {
void shout() {
System.out.println("旺旺");
}
}
class Bird extends Animal {
void shout() {
System.out.println("叽叽喳喳");
}
}
使用abstract
抽象类
当描述一个类的时候,如果不能确定功能函数如何定义,那么该类就可以定义为抽象类,功能函数应该描述为抽象函数。
5:抽象类的实现方式
1:定义animal类
1:定义叫的方法,无法确定方法体,不写方法体
1:public void shout (); 编译失败
2:根据提示在shout的方法加入abstract修饰
1:编译失败,有新的提示
3:根据提示将类加入abstract修饰
1:编译通过
abstract class Animal {
String color;
abstract void shout();
}
class Dog extends Animal {
void shout() {
System.out.println("旺旺");
}
}
class Bird extends Animal {
void shout() {
System.out.println("叽叽喳喳");
}
}
抽象类的特点
1:有抽象函数的类,该类一定是抽象类。
2:抽象类中不一定要有抽象函数。
3:抽象类不能使用new创建对象1:创建对象,使用对象的功能,抽象类的方法,没有方法体。
4:抽象类主要为了提高代码的复用性,让子类继承来使用。
5:编译器强制子类实现抽象类父类的未实现的方法。1:可以不实现,前提是子类的也要声明为抽象的。
抽象的优点
1:提高代码复用性
1:强制子类实现父类中没有实现的功能
2:提高代码的扩展性,便于后期的代码维护
抽象类不能创建对象,那么抽象类中是否有构造函数?
1:抽象类中一定有构造函数。主要为了初始化抽象类中的属性。通常由子类实现。
9:final和abstract是否可以同时修饰一个类?
一定不能同时修饰。
abstract class Animal {
String name;
// 抽象类可以有构造函数
Animal() {
}
Animal(String name) {
this.name = name;
}
abstract void shout();
}
class Dog extends Animal {
Dog() {
}
Dog(String name) {
super(name);
}
void shout() {
System.out.println("旺旺");
}
}
class Demo3 {
public static void main(String[] args) {
// 抽象类不能创建对象
// Animal a=new Animal();
Dog d = new Dog("旺财");
System.out.println();
}
}
2:抽象练习
1:定义抽象类MyShape(图形)
1:定义抽象方法获取图形的长度和面积
2:定义子类Rect继承父类MyShape
1:定义自身特有的长和宽(成员变量) width height;
2:实现父类未实现的函数。3:定义子类 Circle实现父类MyShape
1:定义自身特有的半径和圆周率(使用常量)
2:实现父类为实现的方法。
/*
}
2:抽象练习
1:定义抽象类MyShape(图形)
1:定义抽象方法获取图形的长度和面积
2:定义子类Rect继承父类MyShape
1:定义自身特有的长和宽(成员变量) width height;
2:实现父类未实现的函数。
3:定义子类 Circle实现父类MyShape
1:定义自身特有的半径和圆周率(使用常量)
2:实现父类为实现的方法。
*/
abstract class MyShape {
abstract double getLen();
abstract double getArea();
}
class Rect extends MyShape {
double width;
double height;
Rect() {
}
Rect(double width, double height) {
this.width = width;
this.height = height;
}
double getLen() {
return 2 * (width + height);
}
double getArea() {
return width * height;
}
}
class Circle extends MyShape {
double r;
public static final double PI = 3.14;
Circle() {
}
Circle(double r) {
this.r = r;
}
double getLen() {
return 2 * PI * r;
}
double getArea() {
return PI * r * r;
}
}
class Demo4 {
public static void main(String[] args) {
Rect r = new Rect(5, 5);
System.out.println(r.getLen());
System.out.println(r.getArea());
System.out.println();
Circle c = new Circle(5);
System.out.println(c.getLen());
System.out.println(c.getArea());
}
}
【正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下面有个“顶”字,你就顺手把它点了吧(要先登录CSDN账号哦 )】
—–乐于分享,共同进步!
—–更多文章请看:http://blog.csdn.net/duruiqi_fx
JAVA面向对象-----抽象类的更多相关文章
- java面向对象--抽象类和接口
如果某个父类只知道其子类应该包含哪些方法,但无法知道如何实现这些方法,同时要使用多态的特性,怎么办? 抽象方法:关键字abstract允许在一个类中创建一个或多个没有方法体的方法--只提供方法签名,但 ...
- JAVA面向对象-----抽象类注意细节
抽象类可以没有抽象方法(java.awt.*的类就是这样子操作的). 抽象类可以继承普通类与抽象类. 抽象类不能直接使用类名创建实例,但是有构造方法,构造方法是让子类进行初始化. 抽象类一定有构造方法 ...
- Java面向对象—抽象类和接口
本文引用海子的一篇文章:http://www.cnblogs.com/dolphin0520/p/3811437.html 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法 ...
- Java面向对象---抽象类与接口
final关键字 1.final关键字在java中被称为完结器,表示最终的意思: 2.final能声明类.方法.属性: 3.使用final声明的类不能被继承,使用final声明的方法不能被重写,使用f ...
- java 面向对象抽象类和接口
1.abstract:可以修饰类和方法,被abstract修饰过的称为抽象类和抽象方法. 抽象类: 除了不可以创建对象, 其他和普通类一致. 可以有成员方法.静态方法和构造方法(提供给子类调用)等. ...
- JAVA面向对象 - 抽象类、接口
抽象类 用abstract关键字来修饰一个类时,这个类就叫抽象类,用abstract关键字来修饰一个方式时,这个方法就是抽象方法.当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实 ...
- Java面向对象抽象类实例练习
abstract class Animal { abstract void eat(); } class Cat extends Animal { void eat() { System.out.pr ...
- Java面向对象抽象类案例分析
/** 雇员示例: 需求:公司中程序员有姓名,工号,薪水,工作内容 项目经理除了有姓名,工号,薪水还有奖金,工作内容 对给出需求进行数据建模 分析: 在这个问题领域中,先找出涉及的对象 通过名词提炼法 ...
- java面向对象的核心思想
java面向对象的特征之一:封装 1.封装性的使用 package edu.tongji.classdemo; /* 封装性 1.封装的目的:保护某些属性和方法不被外部所见 2.封装的实现 为属性和方 ...
随机推荐
- 有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法
<Deep Learning>(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(ove ...
- codevs 2621 土地侵蚀
提交地址:http://codevs.cn/problem/2621/ 2621 土地侵蚀 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 De ...
- brk和mmap(转)
进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap: 1.brk是将数据段的(.data)的最高地址指针_edata往高地址推 2.mmap是虚拟地址空间找一个空闲的虚拟内存 如果mal ...
- C++Primer学习——未定义行为
定义: 主要是求值顺序的问题 int i = f1() + f2(); //我们无法知道是f1 还是 f2先被调用 而且求值顺序和优先级和结合律无关,比如: f() + g()*h( ...
- 【BZOJ2243】【SDOI2011】染色
题意见试题传送门 解题思路:显然是题树剖题. 考虑用线段树维护区间端点颜色与颜色数,这样就可以方便的合并,注意查询的时候对端点的特殊处理即可. 时间效率最高为\( O (m \log^{2} n) \ ...
- NOIP2014-6-14模拟赛
Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤1 ...
- [BZOJ]1027 合金(JSOI2007)
不知道该如何评价吧,很神的一道题,就算是10年前的题目也不可小觑啊. Description 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁 ...
- Python中byte与str
原文传送门:请点击 现在计算机中,在内存中采用unicode编码方式. 可以看到上图中,字节型数据t并没有像想象中的一样显示0,1字符串.显示仍然是b,这是因为t是采用utf-8来编码,而utf-8与 ...
- C语言程序设计第五次作业--循环结构(1)
(一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下: c = 5×(f-3 ...
- prop与attr的区别
与prop一样attr也可以用来获取与设置元素的属性. 区别在于,对于自定义属性和选中属性的处理. 选中属性指的是 checked,selected 这2种属性 1. 对于自定义属性 attr能够获取 ...