A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 丁朋 于 2012-7-14 20:25 编辑

    我再学习接口、继承时出现了一些混淆,主要是构造函数、静态代码块、接口、继承等等,毕老师讲的有点快,回放还是不能理解,这该怎么理解理解!

各位网友的回答还是很给力的,多谢了!

5 个回复

正序浏览
我再学习接口、继承时出现了一些混淆,主要是构造函数、静态代码块、接口、继承等等,毕老师讲的有点快,回放还是不能理解,这该怎么理解理解!
LZ 可能以前没有接触过面向对象这些东西,看视频的时候有没有及时练习。其实这些东西有类似的地方,但是真正弄明白后就可以分辨的很清楚了。

首先,构造函数是声明对象时用来创建对象的,它与类型名完全相同,而且没有返回值。在创建类时如果没有写构造函数的话,系统会有一个默认的无参数的构造函数,而且通常程序员回会创建多个重载的构造函数。比如:Student stu = new Student()   Student stu1 = new Student(name)   Student stu2 =  new Student (name, age)这里new后面的都是构造函数。


关于静态代码块,我记得当时毕老师说这个在真正的开发中一般不会用到,有可能在面试时用到。静态代码块的作用是初始化类,是类中最早执行的代码。个人认为静态代码块不用牢记,见到知道就行了。


接口是非常重要的,接口中一般定义一些方法,而且接口中成员法方都是由 public abstract static 修饰的,就算你写程序时没有写这些修饰关键字,系统编译时也会自动给你添上的。这也就是说接口没有方法体,所以就扣需要通过类实现后才有意义。接口可以降低代码的耦合度,使程序的可扩展性加强。关于接口使用的例子很多,个人认为还是自己亲自去写几个小例子方能记得清。


继承就简单了,就是一个类继承另一个类,子类继承父类之后,拥有父类所有非私有的成员,包括变量和方法。在JAVA中,类只能继承一个父类,也就是单一继承。但是接口的继承可以是多继承的。关于继承值得一提的是,当一个子类继承父类后,子类的对象回优先调用子类中声明的成员,如果子类中不存在才会去父类中寻找。不过,如果加上super关键字后,就是指的父类中的成员。
回复 使用道具 举报
首先说构造函数和静态代码块。静态代码块优于构造函数执行。因为静态代码块随着类的加载就已存在,而构造函数是在对象建立的时候new的时候才开始调用的。


下面说接口和继承:


接口:初期理解,可以认为是一个特殊的抽象类
        当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
class用于定义类
interface 用于定义接口。

接口定义时,格式特点:
1,接口中常见定义:常量,抽象方法。
2,接口中的成员都有固定修饰符。
        常量:public static final
        方法:public abstract
记住:接口中的成员都是public的。


接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。
否则子类是一个抽象类。

接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。

继承:
1,提高了代码的复用性。
2,让类与类之间产生了关系。有了这个关系,才有了多态的特性。


注意:千万不要为了获取其他类的功能,简化代码而继承。
必须是类与类之间有所属关系才可以继承。


子父类出现后,类成员的特点:

类中成员:
1,变量。
2,函数。
3,构造函数。

1,变量
如果子类中出现非私有的同名成员变量时,
子类要访问本类中的变量,用this
子类要访问父类中的同名变量,用super。

super的使用和this的使用几乎一致。
this代表的是本类对象的引用。
super代表的是父类对象的引用。

2,子父类中的函数。

当子类出现和父类一模一样的函数时,
当子类对象调用该函数,会运行子类函数的内容。
如同父类的函数被覆盖一样。

这种情况是函数的另一个特性:重写(覆盖)


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


覆盖:
1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。

2,静态只能覆盖静态。


记住:
重载:只看同名函数的参数列表。
重写:子父类方法要一模一样。

3,子父类中的构造函数。

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

为什么子类一定要访问父类中的构造函数。

因为父类中的数据子类可以直接获取。所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。
所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。

注意:super语句一定定义在子类构造函数的第一行。



子类的实例化过程。

结论:
子类的所有的构造函数,默认都会访问父类中空参数的构造函数。
因为子类每一个构造函数内的第一行都有一句隐式super();

当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数。

当然:子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。
子类中至少会有一个构造函数会访问父类中的构造函数

以上是看毕老师视频的总结,有点长,希望你耐心看下,能有所帮助。
回复 使用道具 举报
构造函数
特点:
1、函数名要与类名相同。
2、不用定义返回值类型。
3、不可以写return语句。
4、对象已建立就会调用与之对应的构造函数。
作用:用于给对象进行初始化。
静态代码块:
格式:static{执行语句}
特点:随着类的加载而执行,而且只执行一次,并且优先于主函数,用于给类进行初始化。


例如:
class Person
{        static//2、静态代码块执行
        {
                System.out.println("这是描述一个人的类!");
        private String name=lisi;/*3、为属性开辟空间,分配内存地址 4、属性默认初始化,name=null,age=0;
5、属性的显示初始化。name=lisi,int age=22;6、这里没有构造代码块,所以这步省略*/
        private int age=22;
        Person(){}
        Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
}
public class Demo
{
        public static void main(String[] args)
        {
                Person/*1、将person类加载到内存。*/ p /*8、将内存地址赋值给栈内存中的p变量*/ = new Person("zhangsan",20)/* 7、构造函数初始化。
将name的值替换为zhangsan,age的值替换为20;*/
                Person p1=new Person();
        }
}
对象的初始化过程:
1、将person类加载到内存。
2、静态代码块执行。
3、为属性开辟空间,分配内存地址
4、属性默认初始化。
5、属性的显示初始化。
6、构造代码块初始化。
7、构造函数初始化。
8、将内存地址赋值给栈内存中的p变量。

类只能单继承,接口可以多实现  类的继承一般继承的是事物的属性,如:姓名,年龄,性别   等,
而接口的实现 一般是实现事物的行为,如:行走,飞翔,游泳(这比较抽象,在一般项目中大部分是指对某事物的增删改查等操作)

实例 :
public interface mood {//燃烧               
          void fire() ;
}
public interface Door extends Mood{//椅子
         void open() ;
}
public class Test implements Door{

        public static void main(String[] args) {
                 
        }

         public void fire() {
                 System.out.println("燃烧吧");
         }

         public void sit() {
                 System.out.println("正在开门");
                 
        }

}
回复 使用道具 举报
这些东西你看看书就能理解的
回复 使用道具 举报
百度一下  你就知道
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马