黑马程序员-----Java基础-----继承

来源:互联网 发布:mac表情 编辑:程序博客网 时间:2024/05/18 03:22

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


继承:extends

将学生和工人的共性描述提取出来单独进行描述
只要让学生和工人单独描述的这个类关系,就可以了。


 1,提高了代码的复用性。
 2.让类与类之间产生了关系,有了这个关系,才有了多的特性。
 
 注意:
 千万不要为了获取其他类的功能,简化代码而继承。
 必须是类与类之间有所述关系才可以继承,所述关系is a。
 
 java语言中只支持单继承 不支持多继承。
 多继承容易带来安全隐患。当多个父类中定义了相同功能,
 当功能内容相同时,子类对象不确定运行哪一个。
 但是java保留这种机制,并用另一种体现形式完成--多实现。
 
 java支持多层继承。也就是一个继承体系
 
 如何使用一个继承体系中的功能?
 想要使用体系,先查阅父类的描述,因为父类汇总定义的事该体系中的共性功能
 通过;了解共性功能,就可以了解该体系的基本功能,那么这个体系已经可以基本使用了。
 
 那么具体调用时,要创建最子类的对象,为什么呢,意识因为有可能父类不能创建对象;
 二是因为创建子类对象可以使用更多的功能 ,包括基本的也包括特有的。
 
 简单一句话;查阅父类功能,创建子类对象使用功能。
class Person
{
int age;
String name;
}
public class EXDemo {
public static void main(String[] args) {

}
}
class Student
{
int age;
String name;
static void study()
{
System.out.println("good study");
}
}       //和上面一样        

class Student extends Person
{

static void study()
{
System.out.println("good study");
}
}

class Worker
{
int age;
String name;
static void work()
{
System.out.println("hard work");
}
}

子父类出现后,类成员的特点
类中成员
1.变量
如果子类中出现非私有的同名变量时,子类要访问本类中的变量用this
子类要访问父类中的同名变量用super。用法与this相同。
2.函数
当子类出现和父类一模一样的函数时,当子类调用该函数时,会运行子类函数内容,
如同父类的函数被覆盖一样
这种情况是函数的另一个特性:重写(覆盖)

当子类沿袭服了你功能,到子类中,但是子类具备该功能,但是功能的内容却和父类不一致,
这时,没有必要定义新功能,二十使用覆盖特殊,保留父类的功能定义,并重写功能内容。


注意事项:
1.子类覆盖父类 必须保证子类权限 大于等于父类权限 才可以覆盖,否则编译失败。
2.静态只能覆盖静态。
记住:
重载:只看同名函数参数列表。
重写:子父类方法要一模一样。

class Fu
{
void show()
{
System.out.prontln(“你好”);
}
}
class Zi Extends Fu
{
void show()
{
System.out.prontln(“wo好”);
}
}


class EXDemo {
public static void main(String[] args) {
Zi z = new Zi;
z.show();//打印子类
}
}


class Fu
{
int num=4;
}
class Zi Extends Fu
{
int num = 5;
void show()
{
System.out.pringln(this.num);//打印子类
System.out.pringln(super.num);//打印父类
}
}
class EXDemo {
public static void main(String[] args) {
Zi z = new Zi;
z.show();
System.out.pringln(z.num"...."z.num);//打印全是子类
}
}


3.构造函数
在对子类对象进行初始化时,父类的构造函数也会运行
那是因为子类的构造函数默认第一行有一条隐式的语句  super();
super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()。


为什么子类一定访问父类中的构造函数:
  因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先看父类是如何对这些数据
  进行初始化的,所以子类对象初始化时,要先访问一下父类的构造函数
  如果要访问父类中的指定的构造函数,可以通过手动定义super语句来指定。
  
  super放在构造函数第一行
  子类实例化过程
  结论:
 子类的所有的构造函数,默认都会访问父类中空参数的构造函数
 因为子类每一个构造函数内的第一行都有一句隐式super();
 
 当父类中没有空参数的构造函数时,子类必须手动通过super或者this语句形式来指定要访问的父类中的构造函数
 
  当然:子类中构造函数第一行可以手动指定this语句来哦访问本类中的构造函数,
  子类中至少会有一个构造函数会访问父类中的构造函数
  
  this和super不能同时出现构造函数,因为都要写在第一行,为什么要在第一行,初始化动作先做
  
  class Person 
  {
  private String name;
  Person(String name)
  {
  this.name=name;
  }
  void show(){}
  }
  class student extends Person
  {
  student(String name)
  {
  super(name);//调用构造函数。
  }
  void method()
  {
  super.show();//直接调用父类一般函数
  }
  }
  -------------------------------------------------
  
class Fu
{
Fu()
{
System.out.pringln("fu");
}
}
class Zi extends Fu
{
Zi()
{
   //手动方式 super(4)
//super()默认存在。调用父类构造函数。先打印fu在打印zi
System.out.pringln("zi");
}
}
class EXDemo {
public static void main(String[] args) {
Zi z = new Zi;

}
}

 final: 最终。作为一个修饰符。
 1,可以修饰类,函数,变量。
 2,被final 修饰的类不可以被继承。为了避免被继承,被子类复写功能。
 3,被final修饰的方法 不能被复写。
 4,被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,也可以修饰局部变量
 
 当在描述事物时,一些数据的出现值是固定的,那么为了增强阅读性,都给这些值起个名字,
 而这个值不需要改变,所以加上final修饰。
 常量的书写规范,多有字幕大写,单词间连接用下划线。MY_PI
 System.out.pringln(3.14);
 final double PI = 3.14;
 
 修饰class 有2个  public  final 目前
 
 final class Demo
 {
  int x = 6;//x是变量
  final x = 3;//x 终身为3,
  final void show1()
  {}
  void show2()
  {}
 }
 class SubDemo extends Demo
 {
  void show1(){}//不能执行
  void show2(){}//不能执行class前有final
 }
 class FinalDemo {
public static void main(String[] args) {

System.out.pringln("nihao");
}


}
 继承这里还是有点复杂的 看的不是太明白,把老师的笔记抄了一遍,慢慢理解吧。

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

0 0