在List1<>中再放一个List2<>,List1中每个List2的长度可以是任意的,而不是像二维数组那样维度固定。
如:
List<String> 表示: 该数组中的所有元素都是String
List<Integer> 。。。。都是Integer
List<List<String>> 表示该数组是一个二维数组, 该数组的每个元素都是 List<String>
例如:
[
['a','b','c'],
['d', 'e', 'f']
]
public static void main(String[] args)
{
List<List<Integer>> a=new ArrayList<List<Integer>>();
for(int i=0;i<3:i++)
{
List<Integer> b=new ArrayList<Integer>();
for(int j=0;j<=i;j++)
{
b.add(j);
}
a.add(b);
}
System.out.println(a);
}
java的继承和实现概念
继承实际上是子类相同的属性和行为可以定义在父类中,子类特有的属性和行为由自己定义,这样就实现了相同属性和行为的重复利用,从而提高了代码复用。
ArrayList 是 List的具体实现所以可以写成 List xx = new ArrayList()...
假如我们要定义如下类:学生类,老师类和工人类,分析如下。
学生类属性:姓名,年龄行为:吃饭,睡觉
老师类属性:姓名,年龄,薪水行为:吃饭,睡觉,
教书班主任属性:姓名,年龄,薪水行为:吃饭,睡觉,管理
如果我们定义了这三个类去开发一个系统,那么这三个类中就存在大量重复的信息(属性:姓名,年龄。行为:吃饭,睡觉)。这样就导致了相同代码大量重复,代码显得很臃肿和冗余,那么如何解决呢?
案例代码实现 1.父类Human类 public class Human {// 合理隐藏 private String name ; private int age ; // 合理暴露 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }} 2.子类Teacher类 public class Teacher extends Human {// 工资 private double salary ; // 特有方法 public void teach(){ System.out.println("老师在认真教技术!"); } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; }} 3.子类Student类 public class Student extends Human{} 4.子类BanZhuren类 public class Teacher extends Human {// 工资 private double salary ; // 特有方法 public void admin(){ System.out.println("班主任强调纪律问题!"); } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; }} 5.测试类 public class Test {public static void main(String[] args) { Teacher dlei = new Teacher(); dlei.setName("播仔"); dlei.setAge("31"); dlei.setSalary(1000.99); System.out.println(dlei.getName()); System.out.println(dlei.getAge()); System.out.println(dlei.getSalary()); dlei.teach(); BanZhuRen linTao = new BanZhuRen(); linTao.setName("灵涛"); linTao.setAge("28"); linTao.setSalary(1000.99); System.out.println(linTao.getName()); System.out.println(linTao.getAge()); System.out.println(linTao.getSalary()); linTao.admin(); Student xugan = new Student(); xugan.setName("播仔"); xugan.setAge("31"); //xugan.setSalary(1000.99); // xugan没有薪水属性,报错! System.out.println(xugan.getName()); System.out.println(xugan.getAge()); } }
多个类可以称为子类,单独被继承的那一个类称为父类、超类(superclass)或者基类。
继承的含义
继承描述的是事物之间的所属关系,这种关系是:is-a的关系。例如,兔子属于食草动物,食草动物属于动物。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。
继承:就是子类继承父类的属性和行为,使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
继承的好处
提高代码的复用性(减少代码冗余,相同代码重复利用)。使类与类之间产生了关系。
继承的格式
通过extends关键字,可以声明一个子类继承另外一个父类,定义格式如下:
class 父类 {……}class 子类 extends 父类 {……}
需要注意:Java是单继承的,一个类只能继承一个直接父类,跟现实世界很像,但是Java中的子类是更加强大的
子类不能继承父类的构造器,因为子类有自己的构造器。值得注意的是子类可以继承父类的私有成员(成员变量,方法),只是子类无法直接访问而已,可以通过getter/setter方法访问父类的private成员变量。