2012-12-31 3 views
-2

여기에 정말 바보 같은 질문이 있습니다. 나는 클래스와 상속이 어떻게 작동하는지 알지만, 나는 android 프로그래밍을하고 있었고 슈퍼 클래스 선언에서 약간 혼란스러워했다.Java 클래스 슈퍼 쿼리

다음 코드는 SQLiteOpenHelper 클래스를 구현한다. 지금까지 제가 걱정하는 한, 이것은 수퍼 클래스입니다. 슈퍼 클래스를 상속하지 않고 변수를 보내도록 변수가 보내지고 있습니까?

분명히 나는 ​​수퍼 클래스가 다른 클래스에서 사용할 수퍼 클래스 변수를 참조한다는 인상을 받았다.

코드 : 당신은 그것을 구현하지, SQLiteOpenHelper을 확장하고

private static class DBHelper extends SQLiteOpenHelper 
{ 
    public DBHelper(Context context) { 
     super(context, KEY_NAME, null, DATABASE_VERSION); 

    } 
+0

정확한 질문은 무엇입니까 ?? – Ravi

+0

여기서 'super'선언은 'SQLiteOpenHelper'클래스에서 상속 받기 위해 사용되었거나 'SQLiteOpenHelper'클래스의 필수 변수 개체를 충족시키는 데 사용되었습니다. – user1352057

답변

0

, 당신 것 인터페이스로. super(...)을 호출하면 실제로 인수가 슈퍼 생성자에 전달됩니다.

+0

위퍼 고맙습니다! 그게 내가 알아야 할 모든 것. – user1352057

0

DBHelper는 하위 클래스이고 SQLiteOpenHelper는 수퍼 클래스입니다. DBHelper는 인스턴스 생성시 super-Constructor를 호출합니다. 이를 위해 SQLiteOpenHelper의 생성자가 사용되며 수퍼 클래스에서 변수를 초기화하는 데 필요한 일부 매개 변수가 필요합니다.

0

코드 구문에 따라 SQLiteOpenHelper의 생성자에는 네 개의 매개 변수가 있어야하며 그렇지 않으면 시간 오류가 발생합니다.

부모 클래스에 동일한 변수가 있고 하위 클래스가 하위 클래스이고 상위 클래스의 개체 참조가 있으면 해당 개체는 수퍼 클래스 varibales 만 참조합니다.

이제 의심의 여지가 없습니다.

+0

실제로 그들은 감사합니다 Manoj! – user1352057

0

super (컨텍스트, KEY_NAME, null, DATABASE_VERSION)는 SQLiteOpenHelper의 생성자에 사용될 변수가 전송된다는 것을 의미합니다. 해당 클래스를 확장하는 경우 해당 변수가 제대로 작성 되려면 해당 변수가 필요할 수 있습니다. 당신이 당신의 자신의 일을 할 경우 자신의 확장 클래스 생성자 또는 방법에

이지만, 당신은 아는 것 같은데 : 나는 당신의 질문을 읽으면서 P에게

+0

하하!내가 여러 다른 사람들과 함께 대답 할 때 나는 항상 어리 석다. P – leenephi

1

를 - 그것은 매우 분명하지 않다 - 당신이 무엇을 이해하지 못하는 이 :

super(context, KEY_NAME, null, DATABASE_VERSION); 

을 의미합니다.

글쎄, 수퍼 클래스의 생성자를 호출하는 유일한 방법입니다. 대부분의 경우, 문제의 수퍼 클래스에는 인수가없는 생성자가 있으므로 수퍼 클래스의 생성자에 대한 호출을 생략 할 수 있습니다. 그러나 그러한 생성자가 없거나 몇 가지 인수가 필요한 다른 생성자를 호출하려면이 함수를 사용해야합니다. 참고 : super()에 대한 호출은 항상 생성자의 첫 번째 문이어야합니다. 그렇지 않으면 생성자가 호출 될 때 수퍼 클래스가 아직 존재하지 않기 때문에 매우 불쾌하고 예측할 수없는 동작이 발생할 수 있습니다. (그리고 Java 엔지니어는이를 알고 있으므로, super()을 너무 늦게 호출하거나 허용하지 않을 때 생략하면 컴파일 타임 오류가 발생합니다.