06_JavaSE之OOP--面向对象(final、抽象类、接口…
2018-06-18 02:50:38来源:未知 阅读 ()
对象(六)
首先,在复习抽象类和接口之前,先来看一个关键字:final.
1.概述:
final是最终的,那么他修饰类、变量、方法就会不能被修改。
2.final修饰的特点:
a.修饰类,类不能被继承
b.修饰变量,变量就成了常量,只能被赋值一次
c.修饰方法,方法不能被重写
修饰类
View Code1 final class Father { //修饰类 2 public void print() { 3 System.out.println("上九天揽月"); 4 } 5 } 6 //报错,不能被继承 7 class Son extends Father { 8 public void print() { 9 System.out.println(“下五洋捉鳖”); 10 } 11 }修饰变量
View Code1 class Son { 2 final int NUM = 10; //常量命名规范,如果是一个单词,所有字母大写,如果是多个单词,每个单词都大写,中间用下划线隔开 3 public static final double PI = 3.14; //final修饰变量叫做常量,一般会与public static共用 4 public void print() { 5 NUM = 20; //报错,不能被改变 6 System.out.println(NUM); 7 } 8 }修饰方法
View Code1 class Father { 2 public final void print() { 3 System.out.println("来啊"); 4 } 5 } 6 7 class Son extends Father { 8 public void print() { //报错,不能被重写 9 System.out.println(“访问你”); 10 } 11 }
基本类型: 值不能被改变。引用类型: 地址值不能改变,对象中的属性可以改变。
一、抽象类(abstract class)
从某种程度上讲,父类或者祖先类更加的通用,人们将他派生为其他的子类或者基类,而不是操作具体某个实例类。
为什么要抽象呢?抽象表面就是看不懂的,而在这里就是把一些共性抽取出来加以更加方便的使用,提高代码的可维护性,复用性。
如:每个人都有名字、年龄这样的属性,我们将这些放父类当中加以抽象出来,而通过set/get方法去操作他们,程序也更加清晰。
1.抽象类特点
a.抽象类和抽象方法都必须用abstract关键字进行修饰
abstract class 类名 { } //抽象类
public abstract void play(); //抽象方法
b.抽象类不一定有抽象方法,有抽象方法的一定是抽象类
c.抽象类一定不能被实例化,那么,抽象类如何实例化呢?
按照多态的方式,有具体的子类去实现实例化。其实,这也是多态的一种,抽象类多态。
d.抽象类的子类,要么也是抽象类,要么重写抽象类中所有的抽象方法。
1 public class TestAbstract { 2 public static void main(String[] args){ 3 // Person person = new Person(); 报错,抽象类不能实例化 4 Person p = new Girl(); 5 p.buy(); 6 } 7 } 8 9 abstract class Person { //抽象类 10 public abstract void buy(); //抽象方法 11 } 12 13 class Girl extends Person{ 14 @Override 15 public void buy() { 16 System.out.println("买买买"); 17 } 18 }
2.抽象类的成员特点
a.成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量。
b.构造方法:有。
用于子类访问父类数据的初始化。
c.抽象类的成员方法特性:
抽象方法:强制要求子类做的事情。
费抽象方法:子类继承的事情,提高代码复用性。
A.一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
可以。这么做的目的只哟一个,就是不让其他类创建本类对象,交个子类完成。
B.abstract不能和哪些关键字共存?static被abstract修饰的方法没有方法体被static修饰的可以用类名.调用,但是类名.调用抽象方法是没有意义的。final被abstract修饰的方法强制子类重写被final修饰的不能让子类重写,所以他两矛盾。private被abstract修饰的希望子类看到并强制重写。被private修饰的不能让子类访问。
二、接口(interface)
① 接口从狭义上讲就是指java的interface。② 从广义上就是指对外提供规格的都是接口
1 public class Demo_Interface { 2 public static void main(String[] args){ 3 //Dog er = new Dog(); 报错,接口不能实例化 4 Dog er = new ErHa(); //父类引用指向子类对象 5 er.watchChild(); 6 } 7 } 8 9 interface Dog { 10 public void watchChild(); 11 } 12 13 class ErHa implements Dog { 14 15 @Override 16 public void watchChild() { 17 System.out.println("二哈看小孩"); 18 } 19 }
3.接口中成员的特点
a.类与类:单继承关系,不可以多继承。但是可以多层继承。b.类与接口:实现关系,可以单实现,也可以多实现。并且还可以在一个继承一个类的同时实现多个接口。c.接口与接口:继承关系,可以单继承,也可以多继承。
抽象类 | 接口 | |||
成员变量 | 可以是变量,也可以是常量 | 只可以是常量 | ||
构造方法 | 有 | 无 | ||
成员方法 | 可以抽象,也可以不抽象 | 只可以抽象 |
类与类 | 继承,单继承 |
类与接口 | 实现,单实现,多实现 |
接口与接口 | 继承,单继承,多继承 |
抽象类 |
被继承体现的是:“is - a”的关系。抽象类中定义的是该继承体系的共性功能。 |
接口 | 被实现体现的是:“like - a”的关系。接口中体现的是该继承体系的扩展功能 |
如有错误之处,欢迎指正。
邮箱:it_chang@126.com
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 面对对象(2) 2020-05-28
- 【JavaSE】反射的总结 2020-05-25
- 【JavaSE】多线程与并发编程(总结) 2020-05-25
- 【JavaSE】泛型知识点(总结) 2020-05-25
- Java笔记:Java面向对象 2020-05-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash