1.格式:
abstract class 类名 {}

2.特点:
1)抽象类和抽象方法必须用abstract关键字修饰
2)抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
3)抽象类不能实例化
因为它不是具体的。

        抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢?用于子类访问父类数据的初始化

4)抽象的子类
a:如果不想重写抽象方法,该子类是一个抽象类。
b:重写所有的抽象方法,这个时候子类是一个具体的类。

    抽象类的实例化其实是靠具体的子类实现的。是多态的方式。

3.抽象类的成员特点:
成员变量:既可以是变量,也可以是常量。
构造方法:有。 用于子类访问父类数据的初始化。
成员方法:既可以是抽象的,也可以是非抽象的。

抽象类的成员方法特性:A:抽象方法 强制要求子类做的事情。B:非抽象方法 子类继承的事情,提高代码复用性。

4.abstract不能和哪些关键字共存?
1)private 冲突
2)final 冲突
3)Static 无意义

5.接口特点

接口用关键字interface表示
格式:interface 接口名 {}
类实现接口用implements表示
格式:class 类名 implements 接口名 {}

6.接口成员特点
1)成员变量: 只能是常量
默认修饰符 public static final
2)构造方法:没有
因为接口主要是扩展功能的,而没有具体存在
3)成员方法: 只能是抽象方法
默认修饰符 public abstract

所有的类都默认继承自一个类:Object。
类Object 是类层次结构的根类。每个类都使用 Object 作为超类。

7.类与类,类与接口以及接口与接口的关系
1)类与类
继承关系,只能单继承,但是可以多层继承
2)类与接口
实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口
3)接口与接口
继承关系,可以单继承,也可以多继承

8.抽象类和接口的区别

1)成员区别
抽象类 变量,常量;有抽象方法;抽象方法,非抽象方法
接口 常量;抽象方法
2)关系区别
类与类 继承,单继承
类与接口 实现,单实现,多实现
接口与接口 继承,单继承,多继承
3)设计理念区别
抽象类 被继承体现的是:”is a”的关系。共性功能
接口 被实现体现的是:”like a”的关系。扩展功能

9.形式参数和返回值问题
返回值类型:
1)基本类型:
2)引用类型:
类作为返回值:返回的是该类的对象
抽象类作为返回值:返回的是该抽象类的子类对象
接口作为返回值:返回的是该接口的实现类的对象

10.链式编程。
每次调用完毕方法后,返回的是一个对象。

11.今天练习过程中出现的错误:有些是经常出现的错误,比如:变量引用方法时方法名后面没有加括号、全角逗号、写太快this.name = name只写了一半等。

/*用猫狗案例,练习抽象类*/abstract class Animal
{private String name;private int age;public Animal(){}public Animal(String name,int age){this.name = name;this.age = age;}public void setName(String name){this.name = name;}public String getName(){return name;}public void setAge(int age){this.age = age;}public int getAge(){return age;}public abstract void eat();//抽象方法,注意后面不用{}。public  void show(){System.out.println("名字叫:" + name + ",年龄为:" + age);/*System.out.println("名字叫:" + name + ",年龄为:" + age + this.eat());//错误: 此处不允许使用 '空' 类型.原意是想把姓名年龄和行为一起打印出来,但忽略了eat()本身就是个打印方法,返回值类型为空*/}
}  class Dog extends Animal
{public Dog(){}public Dog(String name,int age){super(name,age);}public void eat(){System.out.println("爱吃肉骨头");}
}
class Cat extends Animal
{public Cat(){}public Cat(String name,int age){super(name,age);}public void eat(){System.out.println("爱吃鱼");}public void playGame(){System.out.println("玩毛线,抓蝴蝶");}
}class Test1
{public static void main(String[] args){Animal a = new Dog("阿黄",2);a.show();a.eat();a.setName("小黑");a.setAge(2);a.show();a.eat();Animal b = new Cat("小花",3);b.show();b.eat();/*尝试b.playGame();这个编译时就不会通过,因为多态编译是先看左边,Animal类的a无法调用Cat类方法playGame()。*/Cat c = (Cat)b;c.show();c.eat();c.playGame();//强转成子类Cat类就可以了。}
}
/*猫狗案例,加入跳高的额外功能分析:从具体到抽象猫:姓名,年龄吃饭,睡觉狗:姓名,年龄吃饭,睡觉由于有共性功能,所以,我们抽取出一个父类:动物:姓名,年龄吃饭();睡觉(){}猫:继承自动物狗:继承自动物跳高的额外功能是一个新的扩展功能,所以我们要定义一个接口接口:跳高 部分猫:实现跳高部分狗:实现跳高实现;从抽象到具体使用:使用具体类
*/
//定义跳高接口
interface Jumpping{public abstract void jump();
}
interface Counting{//作为练习自己多添加了一个数数功能public abstract void count();
}
abstract class Animal
{private String name;private int age;//构造方法public Animal(){}public Animal(String name,int age){this.name = name;/*this.name;//错误:不是语句。赋值语句忘写了后半句*/this.age =age;/*this.age;//错误:不是语句*/}//定义抽象方法,吃饭public abstract void eat();//定义非抽象方法,睡觉public void sleep(){System.out.println("睡觉觉");}//set\get方法public void setName(String name){this.name = name;}public String getName(){return name;}public void setAge(int age){this.age = age;}public int getAge(){return age;}
}
//定义猫类
class Cat extends Animal{public Cat(){}public Cat(String name, int age){super(name,age);}public void eat(){System.out.println("猫吃鱼");}
}
//定义狗类
class Dog extends Animal{public Dog(){}public Dog(String name,int age){super(name,age);}public void eat(){System.out.println("狗吃肉");}
}
//跳高功能的猫
class JumpCat extends Cat implements Jumpping{public JumpCat(){}public JumpCat(String name,int age){super(name,age);/*super(nam,age);//打字要细心*/}public void jump(){System.out.println("它是会跳高的小猫咪");}
}
//会表演跳高和数数的狗狗
class ShowDog extends Dog implements Jumpping,Counting{   /*同时实现两个功能。类与接口可以多个实现*/public ShowDog(){}public ShowDog(String name,int age){super(name,age);}public void jump(){System.out.println("它是会跳高的小狗狗");}public void count(){System.out.println("它是会数数的狗狗");}
}
//主方法
class InterfaceDemo
{public static void main(String[] args){JumpCat jc = new JumpCat("小白",4);jc.eat();jc.sleep();System.out.println("它的名字叫"+jc.getName()+",它的年龄是:"+jc.getAge());jc.jump();ShowDog sg = new ShowDog();/*ShowDog sg = new ShowDog;//调用方法和定义类时经常会忘记写括号,要留神*/sg.setName("小黑");sg.setAge(5);sg.eat();sg.sleep();System.out.println("它的名字叫"+sg.getName()+",它的年龄"+sg.getAge());/*System.out.println("它的名字叫"+sg.getName()+"它的年龄"+sg.getAge));//错误找不到符号。getAge方法的括弧又忘了*/sg.jump();sg.count();     }
}
/*教练和运动员案例(学生分析然后讲解)乒乓球运动员和篮球运动员。乒乓球教练和篮球教练。为了出国交流,跟乒乓球相关的人员都需要学习英语。请用所学知识:分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。
*///建立学英语功能接口
interface SpeakEnglish{public abstract void speak();/*public abstract void speak(){};//错误:接口抽象方法不能带有主体*/
}
//建立人抽象类
abstract class Person{/*abstract Person // 只顾写abstract,忽略了class*/private String name;private int age;public Person(){}public Person(String name,int age){this.name = name;this.age = age;}public abstract void  eat();public  void sleep(){System.out.println("人人都睡觉");}public void setName(String name){this.name = name;}public String getName(){return name;}public void getAge(int age){this.age = age ;/*this.age;//错误:不是语句。忘记赋值*/}public int getAge(){return age;}
}
//运动员抽象类
abstract class Player extends Person{public Player(){}public Player(String name,int age){super(name,age);}public void eat(){System.out.println("喝豆奶吃鸡腿");}public abstract void study();
}
//教练抽象类
abstract class Coath extends Person{public Coath(){}public Coath(String name,int age){super(name,age);}public void eat(){System.out.println("喝牛奶吃牛排");}public abstract void teach();
}
//乒乓球运动员具体类
class PingPangPlayer extends Player implements SpeakEnglish{public PingPangPlayer(){}public PingPangPlayer(String name,int age){super(name,age);}public void study(){System.out.println("学习挥拍发球接球");}public void speak(){System.out.println("会说英语");/* System.out.println("会说英语") //忘记分号*/}
}
//篮球运动员具体类
class BasketBallPlayer extends Player{public BasketBallPlayer(){}public BasketBallPlayer(String name,int age){super(name,age);}public void study(){System.out.println("学习运球传球投篮");}
}
//乒乓球教练具体类
class PingPangCoath extends Coath implements SpeakEnglish{public PingPangCoath(){}public PingPangCoath(String name,int age){super(name,age);}public void teach(){System.out.println("教授握拍调球的方法");}public void speak(){System.out.println("会说英语");}
}
//篮球教练具体类
class BasketBallCoath extends Coath{public BasketBallCoath(){}public BasketBallCoath(String name,int age){super(name,age);}public void teach(){System.out.println("教授投篮及攻防战术");}
}//主方法
class  InterfaceDemo2
{public static void main(String[] args) {PingPangPlayer ppp = new PingPangPlayer("张继科",28);/*PingPangPlayer("张继科",28);//错误:中文逗号*/System.out.println("这个运动员叫:" + ppp.getName() + "年龄:" + ppp.getAge());ppp.eat();ppp.sleep();        ppp.speak();ppp.study();System.out.println("---------------------");PingPangCoath ppc = new PingPangCoath("刘国梁",40);System.out.println("这个教练员叫:" + ppc.getName() + "年龄:" + ppc.getAge());ppc.eat();ppc.sleep();        ppc.speak();ppc.teach();System.out.println("---------------------");BasketBallCoath bbc = new BasketBallCoath("宫鲁鸣",50);System.out.println("这个教练员叫:" + bbc.getName() + "年龄:" + bbc.getAge());bbc.eat();bbc.sleep();        bbc.teach();System.out.println("---------------------");BasketBallPlayer bbp = new BasketBallPlayer("王治郅",38);System.out.println("这个运动员叫:" + bbp.getName() + "年龄:" + bbp.getAge());bbp.eat();bbp.sleep();        bbp.study();System.out.println("---------------------");SpeakEnglish p = new PingPangPlayer();p.speak();}
}

010Java知识点小结--抽象类、接口相关推荐

  1. C++基础知识点小结

    C++基础知识点小结 第一章 绪论 (1)cout 输出流的对象 (2)cin输入对象 (3)endl 输出控制符/操控符 (4)标识符 (5)命名空间(namespace) (6)左值: (7)右值 ...

  2. 韩顺平循序渐进学java 第13讲 抽象类.接口

    13.1抽象类 13.1.1 概念 当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法,称为抽象方法,用abstract来修饰该类,称为抽象类. 13.1.2 抽象类-深入讨论 抽象 ...

  3. python基础知识点小结(2021/2/9)

    python基础知识点小结(2021/2/9)持续更新中~~ 入门小知识 cmd 在cmd上进行python,直接输入 python\quad pythonpython 退出cmd输入 exit()\ ...

  4. 小白学JAVA,与你们感同身受,JAVA---day6:抽象类接口的理解。鲁迅的一句话:总之岁月漫长,然而值得等待。

    抽象类接口的理解 鲁迅的一句话:总之岁月漫长,然而值得等待. /* 抽象类中的面试题: 1.一个抽象类中可不可以没有抽象方法:可以,这样做的目的只有一个,就是不让其他类创建本类对象交给子类完成. 2. ...

  5. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  6. 线性表部分知识点小结

    线性表部分知识点小结 ------------------------------------- 开发工具与关键技术:<数据结构与算法> 作者:林敏静 撰写时间:2020年5月6日 --- ...

  7. 排序算法部分知识点小结

    排序算法部分知识点小结 ------------------------------------- 开发工具与关键技术:<数据结构与算法> 作者:林敏静 撰写时间:2020年4月26日 - ...

  8. 抽象类+接口+内部类作业题及答案

    抽象类+接口+内部类作业题 一.选择题 Person类和Test类的代码如下所示,则代码中的错误语句是( ).(选择一项) public class Person { public String na ...

  9. 抽象类+接口+内部类作业题

    抽象类+接口+内部类作业题 一. 选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是(  c  ).(选择一项)   public class Person { public ...

  10. 继承 多态 抽象类 接口

    面向对象编程 包 继承 组合 多态 抽象类 接口 包 包(package)是组织类的一种方式. 使用包的主要目的是保证类的唯一性. java中已经提供给我们很多现成的类供我们选择,例如可以使用 imp ...

最新文章

  1. python3自动释放线程_Python3高级特性:并发
  2. oracle11g注册在哪里,oracle 如何新建账号密码在suse11,oracle11g和tomcat开机自启动...
  3. webpack打包第三方类库的正确姿势
  4. 开发函数计算的正确姿势——使用交互模式安装依赖
  5. RTA 广告产品能力详解
  6. Java学习 第三章 数组(一)一维数组
  7. 刷爆了!GitHub标星1.6W,这个 Python 项目太实用!
  8. java 多线程同步
  9. Linux Polkit 中的pkexec 组件存在的本地权限提升漏洞(CVE-2021-4034)修复方法及centos6和centos7的安装包
  10. 宁波计算机程序32届初赛,25届宁波市中小学计算机程序设计竞赛初赛试题
  11. 设计一个求立方体体积的父类,包含一个显示底面各个形状信息的统一方法,信息显示方式 “类别+周长+面积”;一个计算和显示立方体体积的统一方法 设计三个子类(利用继承关系):圆柱、长方体、三棱柱
  12. PHP 生成 ppt,PhpPresentation生成ppt
  13. 2022美国大学生数学建模竞赛
  14. VMware16下载与安装
  15. CocoaPods之Podfile\Podfile.lock
  16. python打印数组
  17. iphone修改app名称_ios软件如何改名字 苹果手机怎么修改软件的图标名称呢
  18. Android 打包AAB+PAD(java篇)
  19. 手把手教你给 SSH 启用二次身份验证
  20. Unity 年度总结:一款游戏的从0到1

热门文章

  1. Windows 11/10 正式版全新 ISO 镜像下载
  2. 35岁不是程序员职场中的绊脚石
  3. Crucile-协作式代码审查
  4. 5-网站日志分析案例项目回顾与点击流数据分析项目介绍
  5. Python 微信机器人
  6. 干货 | 云智慧透视宝Java代码性能监控实现原理
  7. Cocos2d-x 3.4 初体验——安装教程
  8. 在命令行cmd 下,输入dxdiag 查看关于电脑许多硬件的详细信息
  9. 门户通专访蓝色理想曾沐阳:用户需慢慢沉淀
  10. Git vs GitHub –什么是版本控制及其工作方式?