继承:

  1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模。

  2.提高代码的复用性。

  3.extends(扩展),子类是父类的扩展。

  4.子类继承父类可以得到父类的全部属性和方法。(除了父类的构造方法)。

  5.java中只有单继承,没有像c++这种的多继承。多继承就是为了实现代码的复用性,但引入了复杂性,使系统之间的关系造成混乱。

  6.java中的多继承,可以通过接口来实现。

  7.如果定义一个类时,没有调用extends,则默认定义的父类是:Java.lang.Object。

  8.不同的的叫法:超类,父类,基类,子类,派生类。

继承:

代表了一种is-a关系。如果说A是B,也就可以说A继承了B。

父类(SuperClass):更加通用。
* 可以子类中共有的特性和功能保存到父类中
* 优点:提高了代码的复用性。

public class Teacher {
private String name;
private int age;
private int wrokOfYear; public Teacher(String name, int age, int wrokOfYear) {
// super();
this.name = name;
this.age = age;
this.wrokOfYear = wrokOfYear;
} public Teacher() {
// super();
} // getter方法:取值
public String getName() {
return name;
} // setter方法:赋值
public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public int getWrokOfYear() {
return wrokOfYear;
} public void setWrokOfYear(int wrokOfYear) {
this.wrokOfYear = wrokOfYear;
} /**
* 自我介绍
*/
public void intro() {
System.out.println("同学们好,我是" + name + ",今年" + age + "岁,已经工作了" + wrokOfYear + "年");
} /**
* 授课
*/
public void giveLession() {
System.out.println("知识点讲解....");
System.out.println("知识点总结....");
} }

子类:更加具体
* 在java中使用extends关键字实现继承。
* 一旦两个两个类建立了继承关系,子类就可以拥有父类非私有的属性和方法。
* 子类无法继承父类的构造方法,但可以通过super关键字进行调用。
* 语法 [修饰符] class 子类 extends 父类{
*
* }

方法的重写(override):一般发生在子类和父类之间

  1.既可以继承父类的东西又可以灵活的扩充。

  2.其实就是在子类中重新把父类的同名方法重新写一个进行覆盖。

  3.重写方法必须和被重写方法有相同的方法名称,参数列表,返回值。

  4.重写方法不能使用比被重写方法更严格的访问权限。

  5.子类的修饰符范围>=父类的修饰符范围。

重写(override)和重载(overload)的区别:

* 1.重写一般发生在父子之间,重载一般在同一个类中。
* 2.重写要求方法名,返回值类型,参数列表必须与父类相同,并且修饰符范围大于等于父类方法的修饰符范围。
* 重载方法名相同,参数列表不同,与返回值类型及修饰符无关。
* 3.作用不同。
* 重载主要是为了提供一种同名方法不同参数的能力(可以让一个类用于多个同名的方法)
* 重写主要是为了结合多态使用,提高程序扩展性和可维护性。
*
* 注意:一旦子类重写了父类中的方法,创建子类实例后,调用子类重写后的方法。
*
* @Override:重写的注解,标注当前方法为重写父类的方法,必须满足重写的规则。
*/

super:

  是直接父类对象的引用,可以通过 super来调用父类中被子类覆盖的方法和属性。

  super和this其实都是隐式参数,super指当前父类,this指当前。

public class JavaTeacher extends Teacher{
public JavaTeacher(){ }
public JavaTeacher(String name,int age,int workOfYear){
super(name,age,workOfYear);//调用父类的构造方法
} //方法的重写(覆写)
public void giveLession() {
System.out.println("打开eclipse.....");
// System.out.println("知识点讲解.....");
// System.out.println("知识点总结.....");
super.giveLession();//使用super调用父类的方法。
}
}
public class Test {
public static void main(String[] args) {
JavaTeacher javaTeacher = new JavaTeacher("zhangsan",30,6);
javaTeacher.intro();
javaTeacher.giveLession();
System.out.println("************************************");
DBTeacher dbTeacher = new DBTeacher("lisi",33,9);
dbTeacher.intro();
dbTeacher.giveLession();
}
}
public class DBTeacher extends Teacher{
public DBTeacher(){ }
public DBTeacher(String name,int age,int workOfYear){
super(name,age,workOfYear);//调用父类的构造方法
} public void giveLession() {
System.out.println("打开oracle.....");
super.giveLession();//调用父类的方法
}
}

super调用父类中带参数的构造方法同时调用自身的属性进行赋值:

public TestCar(String bland,String size,int price,String color){
super(bland,size,price);
this.color=color;
}

任何类的构造函数中,若是构造函数的第一行代码没有显式的调用super(...);那么Java默认都会调用super();作为父类的初始化函数。 所以你这里的super();加不加都无所谓。

public class AtWill {
public static void main(String[] args) {
Cat c = new Cat(); //---------------(1)
System.out.println("-------------------");
Cat c1 = new Cat("花花",4); //----------------(2)
}
private String color;
private int foot; public AtWill(){
System.out.println("我是父类无参数构造器");
} public AtWill(String color,int foot){
System.out.println("我是父类有参数构造器");
this.color = color;
this.foot = foot;
}
}
class Cat extends AtWill{ public Cat(){
// super(); //---------------可以省略,没有super也自动调用父类无参构造
System.out.println("我是子类无参数构造器");
} public Cat(String color,int foot){
//super(color,foot); //---------------(3)
// super(); //---------------可以省略,调用的父类无参构造
System.out.println("我是子类有参数构造器");
}
}
/**
* 我是父类无参数构造器
我是子类无参数构造器
-------------------
我是父类无参数构造器
我是子类有参数构造器
*/

*java.lang.Object类:所有类的基类
*一个类如果没有显式使用extends继承其他类,这个类继承了Object类,在任何类的对象中使用Object中的方法
*public class Student{
*}
*public class Student extends Object{
*}
*常用的方法:
* getClass() 返回此 Object 的运行时类。主要用于反射机制。
* toString() 返回该对象的字符串表示。如果使用System.out.println(stu);默认调用stu.toString()
* cn.zzsxt.oop6.Student@26ffd553==》
* cn.zzsxt.oop6.Student(包名.类名)+@+16进制表示的hashcode码
* toString()方法经常在子类中重写。
*
*/

public class Student {
String name;
int age;
public Student(){ } public Student(String name,int age){
this.name=name;
this.age=age;
} @Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
} public static void main(String[] args) {
Student stu = new Student("张三",);
// Student stu2 = new Student();
// String str = stu.toString();
// String str2 = stu2.toString();
// System.out.println(str);
// System.out.println(str2);
System.out.println(stu);//默认调用对象的toString();
System.out.println(stu.toString());
}
}

重写object中equals方法:

public class Student {
String name;
int age;
public Student(){ }
public Student(String name,int age){
this.name=name;
this.age=age;
}
/**
* 重写Object中equals方法
*/
@Override
public boolean equals(Object obj) {
Student stu = (Student)obj;  //强转?
if(name.equals(stu.name)&&age==stu.age){
return true;
}else{
return false;
}
} }
/**
* ==和equals的区别
* ==在比较内容时分为以下两种情况:
* 1.使用==比较基本数据类型,做的值的比较,值相同返回true,否则返回false
* 2.使用==比较引用类型,比较不是内容是否相同,而是两个对象的引用(地址)是否相同,
* 如果指向相同的地址返回true,否则返回false。
* equals():比较内容是否相同。
* Object中的equals方法本质比较引用(==),如果需要按照内容进行比较是否相同,就需要重新Object中equals方法。
*/
public class TestEquals {
public static void main(String[] args) {
Student stu = new Student("zhangsan",);
Student stu2 = new Student("zhangsan",);
System.out.println(stu==stu2);//比较stu和stu2是否指向相同的地址。
System.out.println(stu.equals(stu2));//
}
}

父类和子类中代码的执行顺序
* 静态代码块在使用类时执行。
* 普通代码块在创建对象时执行。
* 父类的静态代码块>子类静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法
* 在创建子类时,先调用父类的构造方法先创建父类的实例,在创建子类的实例。

public class Child extends Parent{
{
System.out.println("Child....代码块1");
}
static{
System.out.println("Child...static1....");
}
public Child(){
super();
System.out.println("Child()....");
}
{
System.out.println("Child....代码块2");
}
static{
System.out.println("Child...static2....");
} public static void main(String[] args) {
Child child = new Child();
}
}
public class Parent {
{
System.out.println("Parent....代码块");
}
static{
System.out.println("Parent...static1.....");
} public Parent(){
System.out.println("Parent().....");
} {
System.out.println("Parent....代码块2");
}
static{
System.out.println("Parent...static2.....");
} }

Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)的更多相关文章

  1. java代码块执行顺序

    父类 public class Father { public Father() { System.out.println("父类构造PUBLIC father"); } stat ...

  2. Java中普通代码块,构造代码块,静态代码块执行顺序

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...

  3. 三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解

    在上节博客中曾提到过类的继承,这篇文章主要是介绍类的继承.构造函数以及静态代码块的执行顺序. 首先接着分析在黑马基础测试中的一个关于继承的题目,题目描述如下: 声明类Person,包含2个成员变量:n ...

  4. Java中static代码块,{}大括号代码块,构造方法代码块执行顺序!

    注:下列代码中的注释都是JUnit4单元测试运行结果. 首先,没有父类的(父类是Object)的类A package Static.of; public class A { { System.out. ...

  5. java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序

    过滤器拦截到响应url的请求后会先执行doFilter()方法中chain.doFilter()之前的代码,然后执行下一个过滤器或者servelt.紧接着执行chain.doFilter()之后的代码 ...

  6. java中的代码块执行顺序

    /* 代码块:在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同,可以分为 局部代码块:局部位置,用于限定变量的生命周期. 构造代码块:在类中的成员位置,用{}括起来的代码.每次 ...

  7. java中父类子类静态代码块、构造代码块执行顺序

    父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...

  8. Java静态代码块、构造代码块执行顺序问题

    package com.zxl.staticdemo; public class BlockTest { static { System.out.println("BlockTest静态代码 ...

  9. Java面向对象 继承(上)

       Java面向对象 继承 知识概要:         (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...

随机推荐

  1. PHP程序员要掌握的技能

    1. Composer 第一点就要提 Composer ,自从 Composer 出现后,PHP 的依赖管理可以变得非常简单.程序内依赖一些类库和框架,直接使用 Composer 引入即可,通过使用 ...

  2. Java nio 理解

    Java nio 称为Java new IO ,对Java io而言的.他有两个主要的概念:缓存.通道. 在程序中,数据的来源或写入,要么网络.要么硬盘.所有通道分为:文件通道.TCP通道.UDP通道 ...

  3. 集合(五) TreeMap

    4.TreeMap SortedMap接口继承Map接口,是排序键值对的接口,实现排序的的方法是Comparator.而NavigableMap接口继承于SortedMap,新增了一些导航方法.而Tr ...

  4. 【洛谷P2387】魔法森林

    题目大意:给定一个 N 个点,M 条边的无向图,边有两个边权 a, b,求从 1 号节点到 N 号节点路径的两个权值和的最大值最小是多少. 题解: 对于有两个属性的结构的最优化问题,可以考虑先按照其中 ...

  5. React组件:Dragact 0.1.4发布

    Dragact 是一款React组件,他能够使你简单.快速的构建出一款强大的 拖拽式网格(grid)布局. 仓库地址:Dragact 经过几天的迭代时间Dragact已经能够支持自由缩放功能了(res ...

  6. 【Android-NetWork】 判断是否连接网络,判断网络连接方式

    如何判断Android是否连接网络? Java代码: ConnectivityManager conn = (ConnectivityManager) getSystemService(Activit ...

  7. PHP四种基本排序

    1. 冒泡排序 // 1.冒泡排序法 $array = [12,3,23,2,4,1,0]; function maoPao($arr){ //先判断是不是空数组 if(!empty($arr)){ ...

  8. react-native-swiper的Github地址

    https://github.com/liyinglihuannan/react-native-swiper https://www.jianshu.com/p/4dba338ef37a(中文版

  9. BZOJ 4522: [Cqoi2016]密钥破解 exgcd+Pollard-Rho

    挺简单的,正好能再复习一遍 $exgcd$~ 按照题意一遍一遍模拟即可,注意一下 $pollard-rho$ 中的细节. #include <ctime> #include <cma ...

  10. 7.Java Web的数据库操作

    一.环境配置(基于MySQL数据库) 1.下载MySQL数据库 2.下载安装 Navicat,破解方法去吾爱破解网站查询 第一次连接mysql时可能会出现错误,可能是因为二者对密码的编码方法不一致,可 ...