Java修炼——面向对象_抽象类和抽象方法
抽象类和抽象方法
什么是抽象类?
使用 abstract 修饰的类称为抽象类
public abstract class Person {
}
抽象类的特征
1) 抽象类不可以创建对象
2) 抽象类可以有构造方法
public abstract class Person{
public Person(){
System.out.println("Person类中的无参构造方法");
}
}
抽象类中构造方法的作用,是提供给子类调用的。
package com.bjsxt.abstractpro;
public class Student extends Person {
public Student(){
super();//调用直接父类的无参构造方法
System.out.println("Student类的无参构造方法
");
}
}
public class TestPerson {
public static void main(String[] args) {
//Person p=new Person();
Student stu=new Student();
}
}
3) 抽象类中可以包含的成员
成员变量,成员方法,静态方法,构造方法,fina修饰的方
法,抽象方法
public abstract class Person {
//(1)成员变量/实例变量/属性
private String name;//姓名
//(2)成员方法/实例方法
public void info(){
System.out.println("大家好,我叫"+name);
}
//(3)静态方法
public static void show(){
}
//(4)构造方法
public Person(){
System.out.println("Person类中的无参构造方法
");
}
//(5)final修饰的方法,只能被子类调用,不允许被子
类重写
public final void fun(){
}
使用 abstract 修饰的方法称为抽象方法
抽象方法的特征
- 抽象方法不允许有方法体,只能以分号“;”结尾
- 抽象方法只能声明在抽象类中 (含有抽象方法的类必须
是抽象类) - 抽象类中可以包含 0 个或多个抽象方法
- 抽象方法必须被子类实现
- 如果子类不能实现父类中的抽象方法,那么子类也必须 是抽象类
总结:abstract可以修饰类和方法
什么情况下使用抽象方法和抽象类
通过抽象类,可以避免子类设计的随意性。通过抽象类,
我们就可以做到严格限制子类的设计,使子类之间更加通
用。(程序的可扩展和可维护性)
什么情况下使用抽象类?父类的名称比较抽象,创建对象无
意义。
(使用多态)
Animail 动物类 –》abstract, →abstract shout()
每一种动物 ,分别实现发声的方法
package com.bjsxt.test;
public abstract class Animal {
public abstract void shout();
}
class Dog extends Animal{
@Override
public void shout() {
System.out.println("狗狗在叫:汪汪汪!");
}
}
class Cat extends Animal{
@Override
public void shout() {
System.out.println("猫在叫:喵喵喵!");
}
}
package com.bjsxt.test;
public class TestAnimal {
public static void main(String[] args) {
//父类引用指向子类对象
Animal dog=new Dog();
Animal cat=new Cat();
//调用相同方法
dog.shout();
cat.shout();
}
}

Java修炼——面向对象_抽象类和抽象方法的更多相关文章
- Java之旅_面向对象_抽象类
参考并摘自:http://www.runoob.com/java/java-abstraction.html Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有 ...
- Java面向对象_抽象类、接口
一.抽象类 概 念:很多具有相同特征和行为的对象可以抽象为一个类:很多具有相同特征和行为的类可以抽象为一个抽象类 关键字:abstract 规 则:1.抽象类可以没有抽象方法,有抽象方法的类必 ...
- Java 基础 面向对象和抽象类
面向对象变量 局部变量和成员变量区别 区别一:定义的位置不同 定义在类中的变量是成员变量 定义在方法中或者{}语句里面的变量是局部变量 区别二:在内存中的位置不同 成员变量存储在对内存的对象中 局部变 ...
- Java入门 - 面向对象 - 04.抽象类
原文地址:http://www.work100.net/training/java-abstract.html 更多教程:光束云 - 免费课程 抽象类 序号 文内章节 视频 1 概述 2 Java抽象 ...
- Java:【面向对象:抽象类,接口】
本文内容: 抽象类 接口 抽象类与接口的异同 首发日期:2018-03-24 抽象类: 虽然已经有了父类,但有时候父类也是无法直接描述某些共有属性的,比如哺乳类和人类都会叫,而一般来说哺乳类这个父类并 ...
- PHP面向对象之抽象类,抽象方法
抽象类,抽象方法 抽象类: 是一个不能实例化的类: 定义形式: abstract class 类名{} 为什么需要抽象类: 它是为了技术管理而设计! 抽象方法: 是一个只有方法头,没有方法体的方法 ...
- java面向对象_抽象类和接口
一.抽象类 1.抽象方法:由abstract修饰.只有定义没有方法体.用一个分号结尾. 2.抽象类: 1)包含抽象方法的类必须是抽象类 2)由abstract修饰 3)不能被实例化 4)抽象类如果不被 ...
- Java面向对象_抽象类应用——模板方法模式
概念:定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤. 去个例子分析一下这个概念: public cla ...
- Java修炼——面向对象的三大特征_多态_多态的三个必要条件
多态指的是同一个方法调用,由于对象不同可能会有不同的行为,现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1.多态是方法的多态,不是属性的多态(多态与属性无关) 2.多态的存在有三个必要条 ...
随机推荐
- 三石之道之Ansible自动化运维工具部署
centos6默认python版本为2.6 centos7默认python版本为2.7 ansible需要最低python2.7的支持 总结:centos6要部署ansible工具,需要先升级pyth ...
- C++中对封装的语法支持——友元
友元 1.友元就是授权给某个函数.每个成员函数.某个类具有访问类内部私有成员的权限. 2.为什么用友元?友元可以允许某个类.函数直接访问类内部私有数据,减少函数调用开销,提高效率. 3.友元函数不是成 ...
- django学习与实践
Django简介 Django是一个由Python写成的开放源代码的Web应用框架,它最初是被用来开发管理劳伦斯出版集团旗下的一些以新闻内容为主的网站,即CMS(内容管理系统)软件. 并于2005 ...
- Python文件写入时的编码问题解决
如下代码: import sys import os import django root_dir = os.path.join(os.path.dirname(os.path.abspath(__f ...
- C# 根据字符串生成二维码
1.先下载NuGet包(ZXing.Net) 2.新建控制器及编写后台代码 using System; using System.Collections.Generic; using System.D ...
- img标签不能直接作为body的子元素
前几天在一本教材上看到关于HTML标签嵌套规则一节的时候,看到这么一句话,“把图像作为body元素的子元素直接插入到页面中,这样是不妥的,一是结构嵌套有误,二是图像控制不方便.”后面还给了一段代码演示 ...
- 程序员用于机器学习编程的Python 数据处理库 pandas 进阶教程
数据访问 在入门教程中,我们已经使用过访问数据的方法.这里我们再集中看一下. 注:这里的数据访问方法既适用于Series,也适用于DataFrame. **基础方法:[]和. 这是两种最直观的方法,任 ...
- no matches for kind "Deployment" in version "extensions/v1beta1"
0x00 Problem [root@k8sm90 demo]# kubectl create -f tomcat-deployment.yaml error: unable to recognize ...
- 【NHOI2018】扫雷完成图
[题目描述] 扫雷游戏完成后会显示一幅图,图中标示了每个格子的地雷情况.现在,一个 n * n 方阵中有 k 个地雷,请你输出它的扫雷完成图. [输入数据] 输入共 k+1 行: 第 1 行为 2 个 ...
- Python常见字符串方法函数
1.大小写转换 S.lower() S.upper() 前者将S字符串中所有大写字母转为小写,后者相反 S.title() S.capitalize() 前者返回S字符串中所有单词首字母大写且其他字母 ...