Java继承和多肽
一.二维数组
二维数组的概括:二维数组是基于一位数组的前提引申出来的,用来存储数组元素.int[][] a=new int[2][3]; a[0][0]=1; a[1][1]=2; System.out.println(a[0][0]);这里的[2][3]意思是2个长度为3的数组.可以通过a[x][y]对数组进行赋值或者输出打印,但是x需小于2,y需小于3,不然系统提示为角标越界.
public static void shuzu(int[][] arr) { for(int x = 0 ; x < arr.length ; x ++) { for(int y = 0 ; y < arr[x].length ; y++) { System.err.print(arr[x][y]+" "); } } }一种打印全部数组的方法,比a[x][y]依次输出方便且简单.
二.代码块
概述:用{}括起来的代码,统称为代码,分为:局部代码块: 在main()里面,给变量限定它的生命周期
构造代码块:在一个类中的成员位置中,用{}括起来,可以将多个构造方法中的相同的代码放到构造方法中,对对象进行 初始化 ,在每次执行构造方法之前,先执行构造代码块.
静态代码块:在一个类的成员位置,也是用{}包起来,但是他被static修饰
作用:一般情况 它的作用给类进行初始化 ,且执行一次
代码块的执行顺序:先执行 静态代码块-->构造代码块(且每次执行方法时都要再次执行)-->构造方法
三.关键字final
使用方法和特点:1.可以修饰变量,被修饰的变量将成为一个常量2.可以修饰成员方法,修饰后不能被子类重写
3.可以修饰类,修饰后被修饰的类不能被继承
4.可以修饰引用类型,被修饰后地址值不发生改变,但是所应用的成员变量可以改变
四.多肽
多肽前提:1.必须有继承关系 2.必须有方法重写 3.必须在测试类有父类的应用对象且指向子类
多态中成员访问的特点:1.成员变量--编译看左,运行看右
2.成员方法(非静态)--编译看左,运行看右
3.成员方法(静态)--编译看左,运行看左
4.构造方法--都是对对象进行初始化
多肽好处:1.可以提供代码的复用性 2.可以提高的代码的扩展性
多肽弊端:1.父类引用指向子类对象 2.因为父类引用指向子类对象,子类特有的功能不能用
为了使得多肽可以应用子类的特有功能,引入向上(向下)转型
向上转型:父类的应用对象且指向子类
向下转型:将父类的引用强制转换子类的引用9如强制类型转化,但有时会出现异常)
五.继承:extends
继承的概念:将所有子类共有的特性抽取出来,这一些共有属性全部存储在一个父类,只用通过子类继承于父类方法,子类将获得这一些的共有属性(但不能直接使用私有的东西,只能通过父类的公共方法进行使用),减少了代码的重复书写.
class student{ public void show(){ System.out.println("学习"); } } class javastudent extends student{ public void show(){ System.out.println("学习java"); } } public class cs { public static void main(String[] args) { javastudent j=new javastudent(); j.show(); } }javastudent继承于student,则student为父类,javastudent为子类,中间的show方法在javastudent中被重写,则在测试类中输出为"学习java".(如果在student类中show方法前加final,则student类中show方法不会被重写)
但是在继承中只能单继承(既一个类中能继承一个父类),也可以多层继承(及一个类的父类也可以继承该类的父类[爷爷类])
继承中的注意事项:
1)构造方法不能被继承,但是通过super关键字去访问
2)私有的可以间接的去访问
继承的使用时机: 在使用继承之前要确定子类所要继承的父类是不是父类的种,及"is a",满足及可以继承,也就是说父类的所有子类都需要,父类只不过是子类共有点的集合
五.抽象类
概念:抽象相当于将一类事物的共有性质通过abstract建立为一类,子类继承之后,将该抽象类的共有属性给予子类(也是继承的形式)package 抽象类; abstract class person{ public void show() { System.out.println("人"); } } class son extends person{ public void show() { System.out.println("孙子"); } } public class seshi { public static void main(String[] args) { son s=new son(); s.show(); } }抽象类的成员特点:
1.成员变量可以是变量或常量 2.构造方法可以是有参或无参 3.成员方法可以是有参或者无参的
abstract不能和private final static关键字共存且抽象类不能实例化,只能通过子类来实现
抽象类的子类1)如果子类是抽象类,没有意义,因为都不能实例化,无法创建对象
2)子类具体类,那么子类必须实现父类中的抽象功能.
六.接口
概念:接口相当于对一个类进行特有化的实现方法,一个类可以有多种表现,相当于也可以有多个接口,每个接口都是一种方式的变现.eg:水果(父类)-->苹果(子类)-->苹果可以有多种属性-->implements 多个接口(如口味,品种等接口),继承和借口的理解:继承相当于电脑的电源线(只能实现电脑的基本属性有电),一个类只能有一个继承,接口则相当于U盘接口,可以实现该类的特有属性(电影,音乐等)
public interface smoke { public void smoke(); } public class student implements smoke { public void smoke() { System.out.println("抽烟"); } } public class cs { public static void main(String[] args) { student s=new student(); s.smoke(); } }接口通过interface建立,class通过implements来连接类,但是接口中的方式类必须实现,不然接口无意义
接口不能被实例化,只能通过子类建立对象实现,
抽象类和接口的区别:
答:1.成员变量 抽象类:变量或常量
接口:是一个常量,不能更改
2.构造方法 抽象类:可以有无参或有参
接口:不存在构造方法
3.成员方法 抽象类:可以有抽象方法活非抽象方法
接口:都是抽象方法
4.子类可以有多个接口,但只能继承一个抽象类
5.接口之间可以存在继承关系,但是抽象类之间继承无意义(两者都不能实例化)
接口成员的特点:
成员变量:是一个常量,不能更改,并且默认的修饰符:public static final(可省略)
构造方法:接口不存在构造方法
成员方法:都是抽象方法,默认的修饰符:public abstract(可省略)
七.形式参数和返回值类型
形势参数是基本类型: 只需要建立被调用类的对象,只有被调用类有对象,才能在测试类中实现抽象类和借口类:因为抽象类和接口类都不能实例化,都需要重新写出该抽象类的借口类的子实现类,在测试类中,先建立引用抽象类或借口的对象,用多肽方法,建立一个该抽象类或借口的对象并new该类的子实现类,
返回值是基本类型:用对应的基本类去接收,
abstract class fu{ public void ashow() { System.out.println("学习"); } } class other{ public void show(fu f) { f.ashow(); } } class zi extends fu{ } public class lx1 { public static void main(String[] args) { other o=new other(); fu f1=new zi(); f1.ashow(); } }返回值是抽象类或者是借口:先建立对应的子实现类xian,然后在测试类建立zi的对象,在对fu类建立抽象类多肽,最后调用
abstract class fu{ public void show() { System.out.println("抽象类"); } } class zi{ public fu zshow() { fu f=new xian(); return f; } } class xian extends fu{ } public class lx2 { public static void main(String[] args) { zi z=new zi(); fu f=new xian(); f.show(); } }