JAVA基础复习与总结<一> 对象与类的概念_内部类_继承与多态
一、对象与类
类:类是一个模版,它描述了一类对象的行为和状态。
class animal {
private int color;
private int size;
public void eat () {
System.out.println("I'm eating!");
}
public void sleep () {
System.out.println("I'm sleeping!");
}
}
public static void main(String[] args) {
animal dog = new animal();
dog.eat();
}
二、内部类(innerclassses)
class animal {
private int color;
private int size;
class animalbehavior{
public void eat () {
System.out.println("I'm eating!");
}
public void sleep () {
System.out.println("I'm sleeping!");
}
}
}
|
|
外部类.this.成员变量外部类.this.成员方法 |
2)外部类想要访问成员内部类的成员,必须先创建一个成员内部类对象,再通过指向这个对象的引用来访问。
class animal {
private int color;
private int size;
public animal(int color ,int size){
this.color =color;
this.size = size;
getBehavior().eat();
getBehavior().sleep(); //外部类必须要通过成员内部类的对象来访问内部类的成员
}
private animalbehavior getBehavior(){ //通过这个方法得到了一个内部类对象
return new animalbehavior(); //内部类
}
public class animalbehavior{
public void getColor(){
System.out.println(color); //内部类可以直接访问外部类的成员
}
public void eat () {
System.out.println("I'm eating!");
}
public void sleep () {
System.out.println("I'm sleeping!");
}
}
继承的关键字是:extends,是所有面向对象语言的重要特性。
例public class TestExtends {
public static void main(String[] args){
Student stu = new Student();
stu.name = "kk";
stu.height = 172;
stu.rest();
Student stu2 = new Student("xx",150,"Science");
}
}
class Person{
String name;
int height;
public void rest(){
System.out.println("休息一会儿!");
}
}
class Student extends Person{
String major;
public void study(){
System.out.println("学习俩小时!");
}
public Student(){};
public Student(String name,int height,String major){
this.name = name;
this.height = height;
this.major = major;
}
}
在上例子中我们首先定义了一个Person类,这是一个父类。而之后又定义了一个Student类,Student属于从父类Person中派生出的子类。

当两个类存在继承关系当时候,子类会自动继承父类的属性和方法,那么子类中还可以使用父类的属性和方法。在JAVA中只允许单继承,一个子类只能有一个父类,但是一个父类却可以派生出多个子类。
子类不仅仅继承了父类的属性与方法,还可以发挥出自己的“特长”。比如在父类Person中我们定义了一个简单的“人”,这个类中包含基本信息有名称name和身高height。这个抽象的“人”可以完成的动作是休息rest。
而从一个抽象的人派生出的子类Student就更加具体了。简单来说子类就是把父类更加细化和丰满的一个过程。从Person中诞生了Studnet,Student毫无疑问当然是Person的一员。但是Student却具有着Person大众所不具有的属性(代码段中并未展开),比如学号,比如成绩单等。这样我们就从一个抽象概念的人中拿出了一个有血肉的个体概念。
引入了Person类以后我们还可以从Person类中派生出Teacher、Parent等子类,这样所有子类就可以共用到Person类的属性与方法。在同一个具体项目之中,互相有联系的对象都是从同一个父类中派生出来的,这样有助于规范代码,同时节省操作量。
规范:
1、针对属性
1)子类能够继承父类的public和protected成员变量,并不能继承父类的private成员变量。
2)对于父类的包访问权限成员变量(default,如果不加权限修饰符就默认为default),必须当子类与父类在同一包下才能继承,否则子类不能继承。
3)当子类中出现与父类同名的成员变量时时候,父类的成员变量会被隐藏。即在调用子类对象时候出现的是子类的成员变量。如果要在子类中访问父类的同名成员变量,需要用super关键字来引用。
2、针对方法
1)同上述针对属性--->1)
2)同上述针对属性--->2)
3)如果在子类中出现了与父类同名的成员方法,则子类方法会把父类方法覆盖掉。要调用父类同名方法则要使用super关键字。(这一点很方便的是,可以仅仅在父类中写一个概念性的空方法,而在每个具体子类中对这个空方法根据子类对象具体特点来重写。)
3、针对构造器
子类不能够继承父类的构造器。但是当父类当构造器带有参数时,子类构造器中必须现实通过调用super关键字来调用父类哦构造器并且配上适当的参数列表。如果父类构造器无参,则不需要用super调用父类构造器。如果没有使用super,则系统会自动调用父类的无参构造器。
多态
public class Animal {
String str;
public void voice(){
System.out.println("普通动物叫声!");
}
}
class Cat extends Animal {
public void voice(){
System.out.println("喵喵喵");
}
public void catchMouse(){
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void voice(){
System.out.println("汪汪汪");
}
public void seeDoor(){
System.out.println("看门!");
}
}
JAVA基础复习与总结<一> 对象与类的概念_内部类_继承与多态的更多相关文章
- java基础复习之对于String对象,能够使用“=”赋值,也能够使用newkeyword赋值,两种方式有什么差别?
String类型是实际工作中经经常使用到的类型,从数据类型上划分,String是一个引用类型,是API中定义的一个类.所以String类型的对象能够用new创建,比如String name=new S ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- 《Java基础复习》—常识与入门
突然发现自己Java基础的底子不到位,复习! 所记知识会发布在CSDN与博客网站jirath.cn <Java基础复习>-常识与入门 一.Java语言的知识体系图 分为三部分 编程语言核心 ...
- java基础复习记录
java基础复习记录(数组.对象.异常) 数组 数组的定义 数组是相同类型数据的有序集合.如:篮球队就是一个数组,队员球服上有号码,相当于索引.通过某一个的某一个号码来确认是某一个队员.数组中索引从0 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
随机推荐
- elasticsearch篇之mapping
2018年05月17日 18:01:37 lyzkks 阅读数:444更多 个人分类: Elastic stack 版权声明:文章内容来自于网络和博主自身学习体会,转载请注明出处,欢迎留言大家一起 ...
- SpringCloud笔记三:Eureka服务注册与发现
目录 什么是Eureka? Eureka注册的三大步 第一步,引用Maven 第二步,配置yml 第三步,开启Eureka注解 新建Eureka子项目 把provider子项目变成服务端 Eureka ...
- Fiddler--Filters
本篇主要介绍Fiddler中Filters(过滤器)选项功能. 先看看Filters的界面: 一.模块一 当勾选“Use Filters”,Filters才开始工作:否则Filters中的设置内容将无 ...
- [再寄小读者之数学篇](2014-06-20 Beta 函数)
令 $\dps{B(m,n)=\sum_{k=0}^n C_n^k \cfrac{(-1)^k}{m+k+1}}$, $m,n\in\bbN^+$. (1) 证明 $B(m,n)=B(n,m)$; ( ...
- Jquery+php 动态web表单增删改查
如这类效果: 例一:简单 <html> <head> <meta http-equiv="content-type" content="te ...
- javascript基础 之 void
1,viod是什么? javascript:void(0) 这样的代码是js中很常用的代码,void是javascript中定义的一个操作符,void后面跟一个表达式,void操作符会立即执行后面的表 ...
- 清北学堂学习总结day1
上午篇 一.高精度计算: [以下内容先只考虑非负数情况] •高精度加法: 思路:[模拟竖式运算] 注意:[进位] •高精度减法: 思路:[同加法类似,模拟竖式运算,进位变退位] 注意: [结果为负数的 ...
- 【easy】367. Valid Perfect Square 判断是不是平方数
class Solution { public: bool isPerfectSquare(int num) { /* //方法一:蜜汁超时…… if (num < 0) return fals ...
- $Django 支付宝支付,微信服务号推送消息 (测试需要把应用程序部署到服务器上)
一 支付宝支付 大概 支付宝支付 正式环境:需要用营业执照去申请商户号,appid 测试环境:沙箱环境:https://openhome.alipay.com/platform/appDaily.ht ...
- windows下安装setuptools与pip
1.下载 setuptools与pip 下载地址如下: https://pypi.Python.org/pypi/setuptools https://pypi.Python.org/pypi/pip ...