Java继承和多肽

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();
}
}


猜你喜欢

转载自blog.csdn.net/qq_41923771/article/details/80012437