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面向对象-----抽象类的更多相关文章

  1. java面向对象--抽象类和接口

    如果某个父类只知道其子类应该包含哪些方法,但无法知道如何实现这些方法,同时要使用多态的特性,怎么办? 抽象方法:关键字abstract允许在一个类中创建一个或多个没有方法体的方法--只提供方法签名,但 ...

  2. JAVA面向对象-----抽象类注意细节

    抽象类可以没有抽象方法(java.awt.*的类就是这样子操作的). 抽象类可以继承普通类与抽象类. 抽象类不能直接使用类名创建实例,但是有构造方法,构造方法是让子类进行初始化. 抽象类一定有构造方法 ...

  3. Java面向对象—抽象类和接口

    本文引用海子的一篇文章:http://www.cnblogs.com/dolphin0520/p/3811437.html 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法 ...

  4. Java面向对象---抽象类与接口

    final关键字 1.final关键字在java中被称为完结器,表示最终的意思: 2.final能声明类.方法.属性: 3.使用final声明的类不能被继承,使用final声明的方法不能被重写,使用f ...

  5. java 面向对象抽象类和接口

    1.abstract:可以修饰类和方法,被abstract修饰过的称为抽象类和抽象方法. 抽象类: 除了不可以创建对象, 其他和普通类一致. 可以有成员方法.静态方法和构造方法(提供给子类调用)等. ...

  6. JAVA面向对象 - 抽象类、接口

    抽象类 用abstract关键字来修饰一个类时,这个类就叫抽象类,用abstract关键字来修饰一个方式时,这个方法就是抽象方法.当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实 ...

  7. Java面向对象抽象类实例练习

    abstract class Animal { abstract void eat(); } class Cat extends Animal { void eat() { System.out.pr ...

  8. Java面向对象抽象类案例分析

    /** 雇员示例: 需求:公司中程序员有姓名,工号,薪水,工作内容 项目经理除了有姓名,工号,薪水还有奖金,工作内容 对给出需求进行数据建模 分析: 在这个问题领域中,先找出涉及的对象 通过名词提炼法 ...

  9. java面向对象的核心思想

    java面向对象的特征之一:封装 1.封装性的使用 package edu.tongji.classdemo; /* 封装性 1.封装的目的:保护某些属性和方法不被外部所见 2.封装的实现 为属性和方 ...

随机推荐

  1. 有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法

    <Deep Learning>(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(ove ...

  2. codevs 2621 土地侵蚀

    提交地址:http://codevs.cn/problem/2621/ 2621 土地侵蚀  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold     题目描述 De ...

  3. brk和mmap(转)

    进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap: 1.brk是将数据段的(.data)的最高地址指针_edata往高地址推 2.mmap是虚拟地址空间找一个空闲的虚拟内存 如果mal ...

  4. C++Primer学习——未定义行为

    定义: 主要是求值顺序的问题 int i = f1() + f2();          //我们无法知道是f1 还是 f2先被调用 而且求值顺序和优先级和结合律无关,比如: f() + g()*h( ...

  5. 【BZOJ2243】【SDOI2011】染色

    题意见试题传送门 解题思路:显然是题树剖题. 考虑用线段树维护区间端点颜色与颜色数,这样就可以方便的合并,注意查询的时候对端点的特殊处理即可. 时间效率最高为\( O (m \log^{2} n) \ ...

  6. NOIP2014-6-14模拟赛

    Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤1 ...

  7. [BZOJ]1027 合金(JSOI2007)

    不知道该如何评价吧,很神的一道题,就算是10年前的题目也不可小觑啊. Description 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁 ...

  8. Python中byte与str

    原文传送门:请点击 现在计算机中,在内存中采用unicode编码方式. 可以看到上图中,字节型数据t并没有像想象中的一样显示0,1字符串.显示仍然是b,这是因为t是采用utf-8来编码,而utf-8与 ...

  9. C语言程序设计第五次作业--循环结构(1)

    (一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下: c = 5×(f-3 ...

  10. prop与attr的区别

    与prop一样attr也可以用来获取与设置元素的属性. 区别在于,对于自定义属性和选中属性的处理. 选中属性指的是 checked,selected 这2种属性 1. 对于自定义属性 attr能够获取 ...